XmlWriter 无效的冒号字符

XmlWriter invalid colon character

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

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

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

在您的示例中,"ds" 指的是一个 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 的人 "ParentNode" 和 "Signature" 是在命名空间 "namespace" 中定义的,它被分配了前缀 "ds" xmlns:ds="namespace" 属性。

这非常有用,但如果您想要更简单的东西,并且只想吐出文本,我会说只需使用 StreamWriter:

using (var s = new StreamWriter("test.xml"))
{
    s.WriteLine("<ds:Signature>");
    s.Flush();
    s.Close();
}

我使用了这个代码:

writer.WriteStartElement("wp","wxr_version", null);

得到这个结果:

<wp:wxr_version>