【问题标题】:How do I add a namespace while doing XmlSerialization with an XmlWriter?如何在使用 XmlWriter 进行 XmlSerialization 时添加命名空间?
【发布时间】:2009-03-05 12:52:49
【问题描述】:

我将 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.

【问题讨论】:

  • 不要将标题用作标签字段。类似“如何在使用 XmlWriter 进行 XmlSerialization 时添加命名空间?”

标签: c# .net xml xml-serialization


【解决方案1】:

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

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

如果您可以控制代码。

【讨论】:

  • 我现在已经包含了,但属性仍然没有输出。
  • 对,我很笨,我在 Firefox 中查看输出,其中隐藏了这些属性。查看源代码表明我的原始代码实际上工作正常。 :-( 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多