簡體   English   中英

如何在xml文檔中使用XmlWriter添加命名空間

[英]how to add namespace using XmlWriter in xml document

嗨,我必須使用XmlWriter Class將此文件保存在C#的xfdf文件中;

using (var fs = File.Open("D://abc.xfdf", FileMode.Create))
{
    try
    {
        var doc = XmlWriter.Create(fs);
        doc.WriteStartElement("Highlights");
        foreach (var h in Highlights)
        {
            doc.WriteStartElement("Highlight");
            doc.WriteElementString("Id", h.Id);
            doc.WriteEndElement();
        }
        doc.WriteEndElement();
        doc.Flush();
    }
}

但是我無法保存在xfdf文件中。 得到問題添加

<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">

您的鏈接並沒有真正解釋您的問題是什么,但我會從那里獲取一些XML示例並引導您完成創建。 這些原則可以應用於您實際嘗試創建的任何元素。

<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
    <f href="Document.pdf"/>
    <fields>
        <field name="Street">
            <value>345 Park Ave.</value>
        </field>        
    </fields>
</xfdf> 

因此,雖然您可以直接使用XmlWriter執行此操作,但這通常不是一個好主意 - 它的級別非常低,因此讀取或寫入效果不是很好。 例如,這是創建外部元素和第一個子元素所需的代碼。 注意你必須非常小心地匹配編寫元素的開頭和結尾:

writer.WriteStartElement("xfdf", "http://ns.adobe.com/xfdf/");
writer.WriteAttributeString("space", "http://www.w3.org/XML/1998/namespace", "preserve");
writer.WriteStartElement("f", "http://ns.adobe.com/xfdf/");
writer.WriteAttributeString("href", "Document.pdf");
writer.WriteEndElement();
writer.WriteEndElement();

或者,您可以使用更高級別,更清晰的LINQ to XML API來聲明性地創建XML:

XNamespace ns = "http://ns.adobe.com/xfdf/";

var doc = new XDocument(
    new XElement(ns + "xfdf",
        new XAttribute(XNamespace.Xml + "space", "preserve"),
        new XElement(ns + "f",
            new XAttribute("href", "Document.pdf")
            ),
        new XElement(ns + "fields",
            new XElement(ns + "field",
                new XAttribute("name", "Street"),
                new XElement(ns + "value",
                    "345 Park Ave."
                    )
                )
            )
        )
    );

doc.Save(@"D:\abc.xdfd");

您可以使用API​​以各種不同方式添加序列中的元素,例如:

var element = new XElement(ns + "highlights");

foreach (var h in highlights)
{
    element.Add(new XElement(ns + "highlight", h.Id));
}

要么:

var element = new XElement(ns + "highlights",
    highlights.Select(h => new XElement(ns + "highlight", h.Id))
    );

與以往一樣,谷歌是你的朋友。 很多關於如何使用LINQ to XML的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM