2012-01-23 2 views
6

Il mio XML è sotto;Rimuovere nodi specifici nella radice 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> 

Desidero rimuovere i nodi "di espansione" dall'XML. Dopo aver rimosso il processo, sarebbe stato così;

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

</thesaurus> 
</XML> 

Il mio codice è di sotto;

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

Ho ricevuto un errore "Riferimento oggetto non impostato su un'istanza di un oggetto". per la riga "root.Remove()". Come posso rimuovere i nodi "di espansione" dal file XML? Grazie.

risposta

3

Usa:

rimuoverà solo expansion elementi:

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

rimuoverà tutti i bambini di thesaurus:

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

Grazie per la risposta. È utile per me. – mkacar

+0

@mkacar, prego! –

0

Qualcosa di simile

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

Si rimuove un nodo da suo genitore ...

se si desidera rimuovere solo i nodi di espansione, quindi in pratica si trova una rimozione fino tere non sono in alcun thesaurus, o restituire una lista di loro e passare in rassegna rimuovendoli dal loro thesaurus genitore.

0

Non avete successo, perché il tuo thesaurus hanno spazio dei nomi diversi . Devi specificare ti per farlo funzionare.

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

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

In generale il codice è valido. L'unica cosa che è necessario eliminare elementi figlio non root per raggiungere i risultati necessari.