我使用有效的xml文件作为模板,使用XmlWriter构建一些xml。在文件中,我有这一行:<ds:Signature>
所以,我在C#中这样做了:
writer.WriteStartElement("ds:Signature");
但它给了我一个无效字符0x3A的错误,这是一个冒号。有没有办法让我使用XmlWriter构建那行xml?
答案 0 :(得分:5)
在你的例子中,&#34; ds&#34;指的是一个xml命名空间,并且在正确的XML中,您无法在文件前面的节点或其祖先之一中使用它而无需声明它。
XmlWriter
了解命名空间,强制您创建正确的XML。它会在您使用时记住命名空间。
这意味着您可以执行以下操作:
using (var x = XmlWriter.Create("test.xml"))
{
x.WriteStartElement("ds", "ParentNode", "namespace");
x.WriteStartElement("ds", "Signature", "namespace");
x.WriteEndElement();
x.WriteEndElement();
x.Flush();
x.Close();
}
将产生以下内容:
<?xml version="1.0" encoding="utf-8"?>
<ds:ParentNode xmlns:ds="namespace">
<ds:Signature />
</ds:ParentNode>
这告诉有人读xml&#34; ParentNode&#34;和#34;签名&#34;在名称空间&#34; namespace&#34;中定义,它被赋予前缀&#34; ds&#34;通过xmlns:ds="namespace"
属性。
这非常有用,但是如果你想要更简单的东西,而你只是想吐出文字,我只想说使用StreamWriter
:
using (var s = new StreamWriter("test.xml"))
{
s.WriteLine("<ds:Signature>");
s.Flush();
s.Close();
}