gpt4 book ai didi

c# - 如何在 xml 文档中使用 XmlWriter 添加命名空间

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:44 25 4
gpt4 key购买 nike

您好,我必须使用 XmlWriter 类将此文件保存在 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))
);

一如既往,Google 是您的 friend 。关于如何使用 LINQ to XML 的示例很多

关于c# - 如何在 xml 文档中使用 XmlWriter 添加命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com