xmwriterのある要素に複数のxmlns要素が必要です
-
21-09-2019 - |
質問
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属性)の世話をします。
所属していません StackOverflow