2009-07-21 3 views
0

System.Xmlクラスを使用してプログラムを使用してXML文書を作成し、Saveメソッドを使用すると、出力XMLがそのQNamesを使用しないという問題が発生しました。ノードとちょうどローカル名を使用します。XmlDocument.Saveは要素のフルQNamesを出力しません

例えば所望の出力

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

しかし、私は現在、取得することは私が使用しているすべての名前空間が完全にのxmlns属性を使用して定義されているので、これはやや簡略化されて

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

ですドキュメント要素ですが、ここではわかりやすくするため省略しています。

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

答えて

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); 

を要件がcreateAttributeを引数として名前空間URIを渡しますCreateElementメソッドは、ドキュメントがその情報を引き出すことができると主張できるので、直感的ではないように見えますが、それはどのように動作するのでしょうか。

+0

愚かなように見えますが、答えがありがたいです – RobV

+0

ちょうどこれを試してみましたが、ルート要素で一度だけ宣言する必要があるときは、すべての要素に名前空間定義があります。 – RobV

+0

わかりませんが、サンプルXMLを生成するために使用しているコードを投稿すると、見ていきます。 – grenade

関連する問題