为什么此代码在 xml 元素中找不到任何重复项

本文关键字:找不到 任何重 元素 代码 xml 为什么 | 更新日期: 2023-09-27 17:57:19

这是输入xml:

<?xml version="1.0"?>
<StateSeparationRequestCollection xsi:schemaLocation="https://uidataexchange.org/schemas SeparationRequest.xsd" xmlns="https://uidataexchange.org/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <StateSeparationRequest>
    <StateRequestRecordGUID>30000000000000000000000000004000</StateRequestRecordGUID>
        <SSN>999999999</SSN>
    </StateSeparationRequest>
    <StateSeparationRequest>
    <StateRequestRecordGUID>30000000000000000000000000004000</StateRequestRecordGUID>
        <SSN>999999999</SSN>
    </StateSeparationRequest>
</StateSeparationRequestCollection>

我正在尝试在状态请求记录GUID上查找重复的元素值,如果发现重复项,请从文档中删除它们。

这是我的代码:

XDocument doc = XDocument.Load(xmlreader);
XNamespace ns = "https://uidataexchange.org/schemas";
var duplicates = (from req in doc.Descendants(ns + "StateSeparationRequest")
                  group req by req.Descendants(ns + "StateRequestRecordGUID").First().Value
                  into g
                  where g.Count() > 1
                  select g.Skip(1)).SelectMany(elements => elements);
foreach (var duplicate in duplicates)
{
    duplicate.Remove();
}
var node = doc.Descendants(ns + "EmployerTPASeparationRequest");
var node2 = node.ElementAt(i);
string _StateRequestRecordGUID = "";
foreach (var element in node2.Elements())
{ ...

这是输出应该的:

<?xml version="1.0"?>
<StateSeparationRequestCollection xsi:schemaLocation="https://uidataexchange.org/schemas SeparationRequest.xsd" xmlns="https://uidataexchange.org/schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <StateSeparationRequest>
    <StateRequestRecordGUID>30000000000000000000000000004000</StateRequestRecordGUID>
        <SSN>999999999</SSN>
    </StateSeparationRequest>
</StateSeparationRequestCollection>

为什么此代码在 xml 元素中找不到任何重复项

你可以试试这个:

var dups = doc.Descendants(ns + "StateSeparationRequest").GroupBy(e => e.Descendants(ns +"StateRequestRecordGUID").First().ToString());
//remove the duplicates
foreach (XElement ele in dups.SelectMany(g => g.Skip(1)))
    ele.Remove();

我错过了没有显示在xml文件中的父节点。 我需要添加一个名为 EmployerTPASeparationRequest 的父级,然后在 from 语句中使用它。