2012-01-23 13 views
6

Mój XML jest poniżej;Usunąć określone węzły w katalogu głównym XML?

<XML ID="Microsoft Search Thesaurus"> 
<thesaurus xmlns="x-schema:tsSchema.xml"> 
    <diacritics_sensitive>1</diacritics_sensitive> 
    <expansion> 
    <sub>Internet Explorer</sub> 
    <sub>IE</sub> 
    <sub>IE5</sub> 
    </expansion> 
    <expansion> 
    <sub>run</sub> 
    <sub>jog</sub> 
    </expansion> 
</thesaurus> 
</XML> 

Chcę usunąć węzły "ekspansji" z pliku XML. Po usunięciu procesu wyglądałoby to tak;

<XML ID="Microsoft Search Thesaurus"> 
<thesaurus xmlns="x-schema:tsSchema.xml"> 

</thesaurus> 
</XML> 

Mój kod znajduje się poniżej;

XDocument tseng = XDocument.Load("C:\\tseng.xml"); 
XElement root = tseng.Element("XML").Element("thesaurus"); 
root.Remove(); 
tseng.Save("C:\\tseng.xml"); 

mam błąd „Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.” dla linii "root.Remove()". Jak mogę usunąć węzły "ekspansji" z pliku XML? Dzięki.

Odpowiedz

3

użyć:

Usunie tylko expansion elementy:

XNamespace ns = "x-schema:tsSchema.xml"; 
tseng.Root.Element(ns + "thesaurus") 
    .Elements(ns + "expansion").Remove(); 

usunie wszystkie dzieci z thesaurus:

XNamespace ns = "x-schema:tsSchema.xml"; 
tseng.Root.Element(ns + "thesaurus").Elements().Remove(); 
+0

Dziękuję za odpowiedź. Jest to dla mnie przydatne. – mkacar

+0

@mkacar, Nie ma za co! –

0

Coś

XElement root = tseng.Element("XML").Element("thesaurus"); 
tseng.Element("XML").Remove(thesaurus); 

usunąć węzeł z jego rodzica ...

czy chcesz usunąć tylko te węzły dylatacyjnych, a następnie w zasadzie znaleźć usuń aż tere nie są w jakikolwiek tezaurus lub zwróć listę ich i przeprowadź pętlę poprzez usunięcie ich z tezaurusa nadrzędnego.

0

Nie masz sukces, ponieważ thesaurus mają różną nazw . Musisz podać ti, aby to działało.

XNamespace ns = "x-schema:tsSchema.xml"; 
XDocument tseng = XDocument.Parse(xml); 

XElement root = tseng.Element("XML").Element(ns + "thesaurus"); 
root.Elements().Remove(); 

Generalnie Twój kod jest ważny. Jedyne, co musisz usunąć elementy potomne nie root, aby osiągnąć wyniki, które były potrzebne.

Powiązane problemy