2012-01-23 38 views
6

XML của tôi ở bên dưới;Xóa các nút cụ thể dưới gốc 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> 

Tôi muốn loại bỏ các nút "mở rộng" khỏi XML. Sau khi gỡ bỏ quy trình, nó sẽ như thế;

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

</thesaurus> 
</XML> 

Mã của tôi dưới đây;

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

Tôi gặp lỗi "Tham chiếu đối tượng không được đặt thành thể hiện của đối tượng". cho dòng "root.Remove()". Làm cách nào tôi có thể xóa các nút "mở rộng" khỏi tệp XML? Cảm ơn.

Trả lời

3

Sử dụng:

sẽ loại bỏ chỉ expansion yếu tố:

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

sẽ loại bỏ tất cả các trẻ em của thesaurus:

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

Cảm ơn bạn đã trả lời. Điều này thật hữu ích với tôi. – mkacar

+0

@mkacar, Bạn được chào đón! –

0

Something như

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

Bạn xóa nút khỏi nó mẹ ...

nếu bạn muốn loại bỏ chỉ các nút mở rộng, sau đó về cơ bản bạn tìm thấy một loại bỏ cho đến khi tere không có bất kỳ trong từ điển, hoặc trả về một danh sách của họ và lặp lại thông qua việc loại bỏ chúng khỏi từ điển cha mẹ của họ.

0

Bạn không có thành công vì thesaurus bạn có không gian tên khác nhau . Bạn cần phải chỉ định ti để làm cho nó hoạt động.

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

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

Nói chung mã của bạn hợp lệ. Điều duy nhất bạn cần xóa các phần tử con không phải là root để đạt được kết quả bạn cần.

Các vấn đề liên quan