2012-01-23 6 views
6

私のXMLは以下のとおりです。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> 

「拡張」ノードをXMLから削除します。プロセスを削除した後は、そのようになります。

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

</thesaurus> 
</XML> 

マイコードは以下のとおりです。

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

「オブジェクトのインスタンスがオブジェクトのインスタンスに設定されていません」というエラーが発生しました。行 "root.Remove()"のために。 XMLファイルから「拡張」ノードを削除するにはどうすればよいですか?ありがとう。あなたはそれはあなただけの拡張ノードを削除したい場合はテレはどんなでなくなるまで、その後、基本的に削除を見つける親...

だからノードを削除

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

よう

答えて

3

用途:

のみexpansionの要素が削除されます:

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

thesaurusのすべての子を削除します:

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

ありがとうございます。それは私のために便利です。 – mkacar

+0

@mkacar、よろしくお願いします! –

0

何かシソーラスを削除したり、それらのリストを返したり、親シソーラスから削除してループしたりすることができます。

0

あなたthesaurusは別の名前空間を持っているので、あなたは何の成功を持っていません。それを動作させるには、tiを指定する必要があります。

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

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

通常、コードは有効です。あなたが必要とする結果に到達するためにroot以外の子要素を削除する必要があるのは唯一のことです。

関連する問題