选择带有过滤器的节点

本文关键字:节点 过滤器 选择 | 更新日期: 2023-09-27 18:12:34

这是我的xml:

<Instrument RecordCount="3" >
    <Department id = 18384, Sequence=1>
    <InstrumentData StatusCode="1" RoleType="ED" Style="X" DataOther='Data'>
</Department>
<Department id = 18465, Sequence=2>
     <InstrumentData StatusCode="2" RoleType="CD" Style="S" DataOther='Data'>
</Department>
<Department id = 16473, Sequence=3>
    <InstrumentData StatusCode="1" RoleType="CD" Style="T" DataOther='Data'>
</Department>
 </Instrument>

我希望@Status attribute ='1'或'2',而不是@RoleType='E'和'F'和@Style ='S'和'T'为每个节点。

我有下面的语句,但是它没有带回正确的结果。

XmlNodeList nodeList = root.SelectNodes(@"//Department[InstrumentData/@Status='1' or Department[InstrumentData/@Status='1' and not (Department[InstrumentData/@RoleType='E' or Department[InstrumentData/@RoleType='F') and (Department[InstrumentData/@Style='S' or Department[InstrumentData/@Style='T') ]", manager);

或者我需要先得到第一个条件,然后构建xml文档,然后得到下一个条件。

谢谢。

选择带有过滤器的节点

在xpath表达式中使用复杂的条件没有问题。但是你的例子不能工作,因为一些错误。
*部分括号(])缺失
*在你的示例xml中没有Status属性。
*你不能用"或"把一个备注列表放在一起。

的例子:如果您试图获得具有InstrumentData/@StatusCode = 2的部门和具有InstrumentData/@Style= T的部门

nodeList = root.SelectNodes("//Department[InstrumentData/@StatusCode='2'] or //Department[InstrumentData/@Style='T' ]");

但是你可以这样做:

nodeList = root.SelectNodes("//Department[InstrumentData/@StatusCode='2'] | //Department[InstrumentData/@Style='T' ]");

或者(在我看来更好):

nodeList = root.SelectNodes("//Department[InstrumentData/@StatusCode='2' or InstrumentData/@Style='T' ]");

成功启动:

XmlNodeList nodeList0 = root.SelectNodes(@"//ns1:Department[(ns1:InstrumentData/@StatusCode='1'
                                                                or ns1:InstrumentData/@StatusCode='2')
                                                                 and not (ns1:InstrumentData/@RoleType='ED' 
                                                                    or ns1:InstrumentData/@RoleType='FD') 
                                                                and (ns1:InstrumentData/@Style='S' 
                                                                     or ns1:InstrumentData/@Style='T') ]", manager);

感谢您的反馈和及时的回应和输入!!