其他分享
首页 > 其他分享> > 如何在使用XmlWriter进行XmlSerialization时添加名称空间?

如何在使用XmlWriter进行XmlSerialization时添加名称空间?

作者:互联网

我将XmlWriter与Xml序列化结合使用.我能够很好地输出XML,但是如何在XmlWriter中包含xmlns属性似乎在逃避我.

要编写文档的开头,请使用以下命令:

    Writer.WriteStartDocument();
    Writer.WriteStartElement("urlset","http://www.sitemaps.org/schemas/sitemap/0.9");

创建XmlWriter后,我将遍历创建的SitemapNodes并将它们通过序列化将它们写入基础字符串构建器,如下所示:

    foreach (uk.co.andrewrea.SitemapNode node in List)
    {
        Serializer.Serialize(Writer, node);
    }

就像我说的那样,这很好,但是上面的根元素名称空间不包括在内.每次我尝试物理地写属性xmlns时,都会得到一个例外,即xmlns由系统保留供XML使用,因此基本上我无法使用.

我知道如何使用XmlTextWriter以及XmlDocument类来执行此操作,但我需要了解如何使用XmlWriter并通过序列化来实现此目的.

以下尝试还引发有关保留该名称空间的异常.

foreach (uk.co.andrewrea.SitemapNode node in List)
{
      XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
      ns.Add("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");

      Serializer.Serialize(Writer, node, ns);
}

Exception Details: System.ArgumentException: Prefix "xmlns" is reserved for use by XML.

解决方法:

您可以将名称空间添加到XmlSerialization属性,例如:

[XmlElement(
ElementName = "Members",
Namespace = "http://www.cpandl.com")]
public Employee[] Employees;

如果您可以控制代码.

标签:xml-serialization,xml,c,net
来源: https://codeday.me/bug/20191107/2004303.html