XmlWriter で XmlSerialization を実行中に名前空間を追加するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/614640

質問

XmlWriter を Xml シリアル化と組み合わせて使用​​しています。XML は正常に出力できますが、XmlWriter に xmlns 属性を含める方法がわかりません。

ドキュメントの冒頭を書くには、次のコードを使用します。

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

XmlWriter を作成したら、作成した SitemapNodes をループし、次のようにシリアル化を通じて基になる stringbuilder に書き込みます。

    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;

コードを制御できる場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top