这是我的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 doc,然后获得下一个条件。
感谢。
答案 0 :(得分:2)
在xpaht表达式中有复杂条件没有问题。
但是你的例子因为一些错误而无法奏效
*缺少一些括号(]
)
*示例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' ]");
答案 1 :(得分:1)
管理让它发挥作用:
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);
感谢您的反馈和及时的回复和输入!!!