簡體   English   中英

如何使用Linq2Xml刪除具有相同值的節點?

[英]How to use Linq2Xml to remove nodes with identical value?

我有一個xml文件,如下所示

<?xml version="1.0" encoding="utf-8"?>
<front>
    <mtext>a+l</mtext>
    <keyword-group type="Fis">
        <kwd>Tove</kwd>
        <kwd>Jani</kwd>
        <kwd>Reminder</kwd>
    </keyword-group>
    <keyword-group type="Lio">
        <kwd>Saio</kwd>
        <kwd>Tove</kwd>
        <kwd>EMP</kwd>
        <kwd>CSTC</kwd>
    </keyword-group>
    <keyword-group type="LioFree">
        <kwd>Iola</kwd>
        <kwd>Jani</kwd>
        <kwd>Priest</kwd>
    </keyword-group>
    <title>Iatola of rocknrolla</title>
</front>

我想刪除所有具有相同值的<kwd>節點,同時保留第一個節點。 因此輸出的xml文件應如下所示

<?xml version="1.0" encoding="utf-8"?>
<front>
    <mtext>a+l</mtext>
    <keyword-group type="Fis">
        <kwd>Tove</kwd>
        <kwd>Jani</kwd>
        <kwd>Reminder</kwd>
    </keyword-group>
    <keyword-group type="Lio">
        <kwd>Saio</kwd>
        <kwd>EMP</kwd>
        <kwd>CSTC</kwd>
    </keyword-group>
    <keyword-group type="LioFree">
        <kwd>Iola</kwd>
        <kwd>Priest</kwd>
    </keyword-group>
    <title>Iatola of rocknrolla</title>
</front>

我做了

XDocument xdoc=XDocument.Load(@"C:\docm\12345.xml");

            xdoc.Descendants("kwd")
                .GroupBy(g => (string)g.Value)
                .Where(g => g.Count() > 1)
                .SelectMany(g => g.Take(1))
                .Remove();

但是xml文件保持不變...我錯過了什么?

嘗試這個

XDocument xdoc=XDocument.Load(@"D:\test\12345.XML",LoadOptions.PreserveWhitespace);

xdoc.Descendants("kwd")
 .GroupBy(g => (string)g.Value.ToLower())
 .Where(g => g.Count() > 1)
 .SelectMany(g => g.Skip(1))
 .Remove();

xdoc.Save(@"D:\test\12345.XML",SaveOptions.DisableFormatting);

即使節點kwd的值具有不同的情況,這也將起作用。 如果您不想保留空格,請忽略LoadOptionsSaveOptions部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM