这是我的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);
感谢您的反馈和及时的回应和输入!!