XmlWriter无效的冒号字符

时间:2015-09-20 03:54:44

标签: c# xml xmlwriter

我使用有效的xml文件作为模板,使用XmlWriter构建一些xml。在文件中,我有这一行:<ds:Signature>

所以,我在C#中这样做了: writer.WriteStartElement("ds:Signature");

但它给了我一个无效字符0x3A的错误,这是一个冒号。有没有办法让我使用XmlWriter构建那行xml?

1 个答案:

答案 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();
}