2012-01-22 7 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 파일에 추가하려면 어떻게합니까?

이 문제를 해결할 수 있습니까? 감사. 이 루트 XML 노드가 아닌 다른로

답변

6

<thesaurus> 요소는 xmlns 있습니다

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을 생성합니다 : 마지막 thesaurus 요소 아래에 새로운 expansion 요소를 추가 할 경우, 대신이 코드를 사용한다 속성을 사용하여 네임 스페이스를 지정하므로 모든 요소 이름에 네임 스페이스를 추가해야합니다. 또한 요소를 <thesaurus> 대신에 표시하려면 AddAfterSelf 대신 Add을 사용해야합니다.

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 요소에 대해 명시 적으로 네임 스페이스를 지정해야합니다 또한

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

, 명심 현재 코드는thesaurus 후 새로운 expansion 요소 를 추가합니다 하나, 그것의 아이들로 아닙니다.

<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

답장을 보내 주셔서 감사합니다. 루트를 삭제합니다. 요소 (ns + "thesaurus"); 코드를 디버그하십시오. 끝났어. Michael Liu는 시소러스 XML 파일의 요소를 추가하는 올바른 코드를 게시했습니다. – mkacar

관련 문제