2013-02-12 74 views
1

我試圖找到一個簡單的將XML添加到XML-with-xmlns的方法,不必每次都得到xmlns="",也不必指定xmlns如何添加InnerXml而不以任何方式進行修改?

我試過XDocumentXmlDocument但找不到一個簡單的方法。我得到的最接近是這樣:

XmlDocument xml = new XmlDocument(); 

XmlNode docNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null); 
xml.AppendChild(docNode); 
XmlElement root = xml.CreateElement("root", @"http://example.com"); 
xml.AppendChild(root); 

root.InnerXml = "<a>b</a>"; 

但是我所得到的是這樣的:

<root xmlns="http://example.com"> 
    <a xmlns="">b</a> 
</root> 

所以:有沒有一種方法來設置InnerXml沒有它被修改?

+2

所述的xmlns = 「」,是因爲要添加從不同的命名空間的元素。將它們添加到父元素的名稱空間,並且不應該看到xmlns =「」部分 – 2013-02-12 20:50:25

+0

正如我寫的 - 我試圖不必在每個節點中指定名稱空間。 – ispiro 2013-02-12 20:52:01

+0

只需要從父項開始,不需要對它進行硬編碼 – 2013-02-12 21:03:39

回答

2

您可以使用創建root元素的相同方式創建aXmlElement,並指定該元素的InnerText

選項1:

string ns = @"http://example.com"; 

XmlDocument xml = new XmlDocument(); 

XmlNode docNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null); 
xml.AppendChild(docNode); 

XmlElement root = xml.CreateElement("root", ns); 
xml.AppendChild(root); 

XmlElement a = xml.CreateElement("a", ns); 
a.InnerText = "b"; 
root.AppendChild(a); 

選項2:

XmlDocument xml = new XmlDocument(); 

XmlNode docNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null); 
xml.AppendChild(docNode); 

XmlElement root = xml.CreateElement("root"); 
xml.AppendChild(root); 
root.SetAttribute("xmlns", @"http://example.com"); 

XmlElement a = xml.CreateElement("a"); 
a.InnerText = "b"; 
root.AppendChild(a); 

生成的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns="http://example.com"> 
    <a>b</a> 
</root> 

如果使用root.InnerXml = "<a>b</a>";而不是從XmlDocument生成的XML是創建XmlElement

選項1:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns="http://example.com"> 
    <a xmlns="">b</a> 
</root> 

選項2:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns="http://example.com"> 
    <a xmlns="http://example.com">b</a> 
</root> 
+0

正如我寫的 - 我試圖_not_不得不指定每個節點中的名稱空間。 – ispiro 2013-02-12 20:56:54

+0

@ispiro它不會將名稱空間添加到每個節點,但爲了避免具有多個'xmlns'屬性,您需要在創建它們時指定它們位於同一名稱空間中。我知道,爲每個你創建的'XmlElement'重複地指定命名空間是相當煩人的,但是爲了獲得XML,你需要這麼做,這就是你需要做的。 – 2013-02-12 20:58:54

+1

並且我認爲已經有人建議解決這個問題。如果你這樣做,命名空間只會在根節點上。在子節點中顯示爲「xmlns =」「'的原因是因爲它在SD中的父項* – 2013-02-12 20:58:55

相關問題