gpt4 book ai didi

c# - 如何为 XML 创建 XPath?

转载 作者:数据小太阳 更新时间:2023-10-29 02:51:34 26 4
gpt4 key购买 nike

我有一个 Xml 文件,我想在其中创建基于 XPath 的过滤器。我尝试了很多例子,但没有一个有帮助 毫无疑问,我犯了一些错误。我是 XPath 的新手,请帮助我找到解决方案。

<PeopleBatch Counter="3">
<Citriz ID="1d9a88fe-f9cc-4add-b6d1-01e41c561bfb" mVersion="1.0.0" mSequence="1" pVersion="0.0.1" xmlns="http://Citriz/Schemas">
<People Action="U" Status="CD" PeopleID="1" PeopleShortName="Billy" PeopleLongName="Billy Smith" PeopleTypeCode="Commercial" CountryCode="USA" PeopleStatus="Current">
<PeopleRole Action="U" Status="CD" ID="1" CustomerRoleShortName="Billy" CustomerRoleLongName="Billy Smith" TypeCode="OUTS">
<SendRole RoleType="N" ActiveRole="Y"/>
</PeopleRole>
</People>
</Citriz>
<Citriz ID="1d9a88fe-f9cc-4add-b6d1-01e41c561bfc" mVersion="1.0.0" mSequence="2" pVersion="0.0.1" xmlns="http://Citriz/Schemas">
<People Action="U" Status="CD" PeopleID="2" PeopleShortName="Carl" PeopleLongName="Carl Thomas" PeopleTypeCode="Commercial" CountryCode="USA" PeopleStatus="Current">
<PeopleRole Action="U" Status="CD" ID="2" CustomerRoleShortName="Carl" CustomerRoleLongName="Carl Thomas" TypeCode="INSS">
<SendRole RoleType="N" ActiveRole="Y"/>
</PeopleRole>
</People>
</Citriz>
<Citriz ID="1d9a88fe-f9cc-4add-b6d1-01e41c561bfd" mVersion="1.0.0" mSequence="3" pVersion="0.0.1" xmlns="http://Citriz/Schemas">
<People Action="U" Status="CD" PeopleID="3" PeopleShortName="Ryan" PeopleLongName="Ryan Black" PeopleTypeCode="Commercial" CountryCode="USA" PeopleStatus="Current">
<PeopleRole Action="U" Status="CD" ID="3" CustomerRoleShortName="Ryan" CustomerRoleLongName="Ryan Black" TypeCode="INSS">
<SendRole RoleType="N" ActiveRole="Y"/>
</PeopleRole>
</People>
</Citriz>

我需要所有那些子节点属性包含 TypeCode="INSS"这个值的“Citriz”节点。或者如果有其他好的方法建议我。

最佳答案

鉴于您使用的是 LINQ to XML,我不会一开始就使用 XPath。我会使用:

XNamespace ns = "http://Citriz/Schemas";
var nodes = doc.Descendants(ns + "Citriz")
.Where(x => x.Descendants()
.Any(y => (string) x.Attribute("TypeCode") == "INSS"));

或者如果它总是将成为 CitrizPeople 中的 PeopleRole 元素(只有一个每个级别的元素):

XNamespace ns = "http://Citriz/Schemas";
var nodes = doc.Descendants(ns + "Citriz")
.Where(x => (string) x.Element(ns + "People")
.Element(ns + "PeopleRole")
.Attribute("TypeCode") == "INSS"));

我确信这可以在 XPath 中明智地完成,但我个人认为 LINQ to XML 更简单,将数据部分(元素名称、期望值等)与“代码”部分(“我正在寻找后代”或“我正在寻找属性值”)。

关于c# - 如何为 XML 创建 XPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16346612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com