2013-07-02 9 views
6

私はこのようなXML文書を作成できるようにする必要があります。C#で異なる接頭辞/名前空間を持つxml属性を追加するにはどうすればよいですか?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<rootprefix:rootname 
    noPrefix="attribute with no prefix" 
    firstprefix:attrOne="first atrribute" 
    secondprefix:attrTwo="second atrribute with different prefix"> 

    ...other elements... 

</rootprefix:rootname> 

は、ここに私のコードです:

残念ながら
XmlDocument doc = new XmlDocument(); 

XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes"); 
doc.AppendChild(declaration); 

XmlElement root = doc.CreateElement("rootprefix:rootname", nameSpaceURL); 
root.SetAttribute("schemaVersion", "1.0"); 

root.SetAttribute("firstprefix:attrOne", "first attribute"); 
root.SetAttribute("secondprefix:attrTwo", "second attribute with different prefix"); 

doc.AppendChild(root); 

、私は2番目のプレフィックスを有する第二の属性のために取得していますどのような接頭辞はまったくありません。それはちょうど "attrTwo" - schemaVersion属性のようなものです。

したがって、C#のルート要素の属性に異なる接頭辞を付ける方法はありますか?

答えて

2

これは単なるガイドです。あなたがすることができることがあります

 NameTable nt = new NameTable(); 
     nt.Add("key"); 

     XmlNamespaceManager ns = new XmlNamespaceManager(nt); 
     ns.AddNamespace("firstprefix", "fp"); 
     ns.AddNamespace("secondprefix", "sp"); 

     root.SetAttribute("attrOne", ns.LookupPrefix("fp"), "first attribute"); 

     root.SetAttribute("attrTwo", ns.LookupPrefix("sp"), "second attribute with different prefix"); 

これはになります:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <rootprefix:rootname schemaVersion="1.0" d1p1:attrOne="first attribute" d1p2:attrTwo="second attribute with different prefix" xmlns:d1p2="secondprefix" xmlns:d1p1="firstprefix" xmlns:rootprefix="ns" /> 

が、これは任意の助けになることを願っています!

+0

名前テーブルとAddNameSpaceはあなたではなく、デフォルトの命名規則を名前空間の短縮を決定する必要がある場合にのみ必要とされていることは注目に値する(d1p1、d1p2、...) –

0

私はa post on another questionを見て、問題を解決しました。私は基本的には、すべてのXMLを持っている文字列を作成し、XmlDocumentのインスタンスでLoadXmlメソッドを使用しました。

string rootNodeXmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"  
    + "<rootprefix:rootname schemaVersion=\"1.0\" d1p1:attrOne=\"first attribute\"" 
    + "d1p2:attrTwo=\"second attribute with different prefix\" xmlns:d1p2=\"secondprefix\"" 
    + "xmlns:d1p1=\"firstprefix\" xmlns:rootprefix=\"ns\" />"; 
doc.LoadXml(rootNodeXmlString); 
関連する問題