2012-01-22 113 views
4

我想在XML中的最後一個子元素之後添加元素。但是我得到了一個錯誤。在最後一個特定節點/元素之後插入XML元素

<XML ID="Microsoft Search Thesaurus"> 
    <thesaurus xmlns="x-schema:tsSchema.xml"> 
    <diacritics_sensitive>0</diacritics_sensitive> 
    <expansion> 
     <sub>Internet Explorer</sub> 
     <sub>IE</sub> 
     <sub>IE5</sub> 
    </expansion> 
    <replacement> 
     <pat>NT5</pat> 
     <pat>W2K</pat> 
     <sub>Windows 2000</sub> 
    </replacement> 
    <expansion> 
     <sub>run</sub> 
     <sub>jog</sub> 
    </expansion> 
    <expansion> 
     <sub>home</sub> 
     <sub>house</sub> 
    </expansion> 
    </thesaurus> 
</XML> 

我的代碼如下,我遇到這個錯誤,當我調試代碼。

InvalidOperationException未處理。

序列不包含任何元素。

XDocument doc = XDocument.Load("tseng.xml"); //load the xml file. 
IEnumerable<XElement> MemberList = doc.Element("XML").Elements("thesaurus"); 
var Member = new XElement("expansion", 
       new XElement("sub", "home"), 
       new XElement("sub", "house") 
      ); 
MemberList.Last().AddAfterSelf(Member); //add node to the last element. 
doc.Save("tseng.xml"); 

此錯誤是具體線路:

MemberList.Last().AddAfterSelf(Member); 

我不知道什麼是我的問題在此代碼。如何在最後的<expansion>節點後面添加元素到我的XML文件?

你能幫我解決這個問題嗎?謝謝。

回答

6

<thesaurus>元素具有xmlns屬性指定一個名稱空間,因此您需要將名稱空間添加到所有元素名稱。另外,如果您希望新的<expansion>元素出現在<thesaurus>而不是之後,您應該使用Add而不是AddAfterSelf

XNamespace ns = "x-schema:tsSchema.xml"; 
IEnumerable<XElement> MemberList = doc.Element("XML").Elements(ns + "thesaurus"); 
var Member = new XElement(ns + "expansion", 
       new XElement(ns + "sub", "home"), 
       new XElement(ns + "sub", "house")); 
MemberList.Last().Add(Member); //add node to the last element. 
+0

感謝您的解決方案。 – mkacar

0

您需要明確指定命名空間thesaurus元素,因爲它是一個比根XML節點不同:

XNamespace ns = "x-schema:tsSchema.xml"; 
XDocument doc = XDocument.Load("tseng.xml"); 
IEnumerable<XElement> MemberList = doc.Element("XML").Elements(ns + "thesaurus"); 

另外,記住您當前的代碼將thesaurus之後添加新expansion元素一個,而不是它的孩子。如果你想最後thesaurus元素下添加新expansion元素,您應使用此代碼來代替:

var MemberList = root.Elements(ns + "thesaurus"); 
var Member = new XElement(ns + "expansion", 
    new XElement(ns + "sub", "home"), 
    new XElement(ns + "sub", "house") 
); 
MemberList.Last().Add(Member); 

這將產生類似於下面的示例XML:

<XML ID="Microsoft Search Thesaurus"> 
    <thesaurus xmlns="x-schema:tsSchema.xml"> 
    <diacritics_sensitive>0</diacritics_sensitive> 
    <!-- elided: new element goes here --> 
    <expansion> 
     <sub>home</sub> 
     <sub>house</sub> 
    </expansion> 
    </thesaurus> 
</XML> 
+0

謝謝你的回覆。我刪除了root.Elements(ns +「thesaurus」);並調試代碼。完成了。 Michael Liu發佈了正確的代碼來爲詞庫xml文件添加元素。 – mkacar

相關問題