0

这是我的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 属性 ='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,然后获得下一个条件。

谢谢。

4

2 回答 2

3

在 xpaht 表达式中有复杂的条件是没有问题的。但是由于一些错误,您的示例无法正常工作。*缺少
一些括号 ( ) * 您的示例 xml 中没有 Status 属性。 * 您不能使用“或”来组合笔记列表。]

示例:如果您尝试获取 Departments withInstrumentData/@StatusCode = 2和 Departments with 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' ]");
于 2013-05-09T07:40:03.810 回答
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);

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

于 2013-05-09T07:48:18.837 回答