0

System.Xmlクラスを使用してプログラムでXMLドキュメントを作成し、次にSaveメソッドを使用すると、出力XMLがノードにQNameを使用せず、ローカル名のみを使用するという問題が発生しました。

例:必要な出力

<ex:root>
  <ex:something attr:name="value">
</ex:root>

しかし、私が現在得ているのは

<root>
  <something name="value">
</root>

私が使用しているすべての名前空間は、ドキュメント要素のxmlns属性を使用して完全に定義されているため、これは多少単純化されていますが、ここではわかりやすくするために省略しています。

XmlWriterクラスを使用してXmlDocumentを保存でき、これにはXmlWriterSettingsクラスが必要ですが、完全なQNames出力を取得するようにこれを構成する方法がわかりませんでした。

4

1 に答える 1

1

あなたが言うように、ルート要素には名前空間の定義が必要です。

<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
    <iis:WebSite Id="asdf" />
</Wix>

上記のxmlのコード:

XmlDocument document = new XmlDocument();
document.AppendChild(document.CreateXmlDeclaration("1.0", null, null));
XmlNode rootNode = document.CreateElement("Wix", "http://schemas.microsoft.com/wix/2006/wi");
XmlAttribute attr = document.CreateAttribute("xmlns:iis", "http://www.w3.org/2000/xmlns/");
attr.Value = "http://schemas.microsoft.com/wix/IIsExtension";
rootNode.Attributes.Append(attr);
rootNode.AppendChild(document.CreateElement("iis:WebSite", "http://schemas.microsoft.com/wix/IIsExtension"));
document.AppendChild(rootNode);

名前空間uriを引数としてCreateAttributeメソッドとCreateElementメソッドに渡すという要件は、ドキュメントがその情報を取得できると主張できるため、直感に反しているように見えますが、そのように機能します。

于 2009-07-21T15:36:59.847 に答える