Как добавить пространство имен с помощью XmlWriter в документе XML
Привет, я должен сохранить этот файл в xfdf-файле на C#, используя класс XmlWriter;
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">
1 ответ
Ваша ссылка на самом деле не объясняет, в чем ваша проблема, но я возьму оттуда пример 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();
В качестве альтернативы вы можете использовать гораздо более чистый уровень API LINQ to XML для декларативного создания вашего 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 - твой друг. Есть много примеров того, как использовать LINQ to XML.