質問

XMLドキュメントをある形式から別の形式に変換しようとしていますが、これを行っている間、複数のXMLN宣言をルート要素に挿入する必要があることがわかりました。

例:

u003C?xml version="1.0" encoding="utf-8" ?>
u003CTemplate xmlns="http://tempuri.org/TemplateBase.xsd"n xmlns:TYPES="http://tempuri.org/TemplateTypes.xsd">
いくつかのコンテンツ
u003CTemplate>

このすべての理由は、この場合の一般的なタイプを再利用するために、XSDスキーマを複数のXSDに分割したからです。

さて、私が今やりたいのは、このXMLをXMLTextWriterで書くことですが、タイプのXMLNS属性を書くことはできません。

私がこれまでに試したことは:

XmlWriter xmlWriter = XmlWriter.Create(filename, settings);  
xmlWriter.WriteStartElement("Template", "http://tempuri.org/TemplateBase.xsd");
xmlWriter.WriteAttributeString("xmlns", "TYPES", "http://tempuri.org/TemplateTypes.xsd", XmlSchema.InstanceNamespace);

このコードを実行すると、次の例外が表示されます。
System.ArgumentException:プレフィックス「XMLNS」はXMLが使用するために予約されています。

誰かが私の現在の頭痛の治療法を持っていますか?

役に立ちましたか?

解決

使用する

xmlWriter.WriteAttributeString("xmlns", "TYPES", 
    null, "http://tempuri.org/TemplateTypes.xsd");

それ以外の

 xmlWriter.WriteAttributeString("xmlns", "TYPES", 
    "http://tempuri.org/TemplateTypes.xsd", XmlSchema.InstanceNamespace);

これにより、目的の出力が得られるはずです。

他のヒント

とても簡単です。書かないでください xmlns 属性。

代わりに、彼らが属している名前空間に属性と要素を書くべきです。 XmlWriter それ自体で名前空間宣言(XMLNS属性)の世話をします。

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