2015-09-21 44 views
0

當屬性我有一個XML文件:擺脫的xmlns的添加節點到現有的XML

<ns2:root xmlns:ns2="namespace"> 
    <ns2:a> 
     <ns2:b>some content</b> 
     <ns2:c>some content</c> 
     <ns2:d>some content</d> 
    </a> 
</root> 

我需要在特定的位置添加一個新的節點,我的代碼是:

var doc = XDocument.Load(file); 
XNamespace ns2 = "namespace"; 
doc.Element(ns2 + "root").Element(ns2 + "a").Element(ns2 + "c").AddAfterSelf(
    new XElement(ns2+"new", 
     new XElement("new1", 
      new XElement("new2","some content"), 
      new XElement("new3", "some content")))); 

的輸出是:

<ns2:root xmlns:ns2="namespace"> 
    <ns2:a> 
     <ns2:b>some content</b> 
     <ns2:c>some content</c> 
     <ns2:new> 
      <new1 xmlns=""> 
       <new2>some content</new2> 
       <new3>some content</new3> 
      </new1> 
     </new> 
     <ns2:d>some content</d> 
    </a> 
</root> 

所需的輸出是:

<ns2:root xmlns:ns2="namespace"> 
    <ns2:a> 
     <ns2:b>some content</b> 
     <ns2:c>some content</c> 
     <ns2:new> 
      <new1> 
       <new2>some content</new2> 
       <new3>some content</new3> 
      </new1> 
     </new> 
     <ns2:d>some content</d> 
    </a> 
</root> 

如何避免將xmlns atrribute添加到節點new1?


在希望的輸出中編輯錯誤。

+0

從* *信息的角度來看,它們是相同的每一個元素名稱前添加「NS2 +」。通常,您不應該關心XML工具如何選擇代表信息,除非您將此XML提供給實際上不適用於XML的內容,否則它不應該成爲問題 - 如果它適用於「字符串已滿的尖括號看起來像XML「,但要求絕對格式化,那麼通常最好是推動更改已損壞的組件,而不是試圖在XML中強制使用特定的表示。 –

+1

您的示例XML無效,如果更正,我無法重現您聲稱的行爲。我強烈懷疑在XML中有*實際上* xmlns =「...」',這會顯着改變事情。此外,您所需的輸出與您當前的輸出非常不同 - 它具有包含文本的「new1」和「new2」元素,而不是包含具有文本的「new2」和「new3」的「new1」。請展示一個簡短但完整的示例來展示問題,並讓您的問題保持一致。 –

回答

0

需要在地圖命名空間

var doc = XDocument.Load(file); 
XNamespace ns2 = "namespace"; 
doc.Element(ns2 + "root").Element(ns2 + "a").Element(ns2 + "c").AddAfterSelf(
    new XElement(ns2+"new", 
     new XElement(ns2+"new1", 
      new XElement(ns2+"new2","some content"), 
      new XElement(ns2+"new3", "some content")))); 
+0

已經嘗試過,每個節點前都有「ns2:」前綴,這不是我所需要的。 –