2013-05-08 122 views
0

这里是我的xml:的SelectNodes与筛选

<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',而不是@角色类型= '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文档,然后得到一个条件。

谢谢。

+0

对不起,但这是一个绝对混乱。你的xml格式不正确。而你的xpath表达式有很多丢失的括号。 – 2013-05-08 16:50:53

+0

但这是我的问题,我可以像上面一样串起条件来获得所需的结果吗? – user2353545 2013-05-09 04:45:14

+0

已更新xml: <部门ID = “18465” 序列= “2”> <部门ID =“ 16473" 序列= “3”> ' – user2353545 2013-05-09 04:49:36

回答

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); 

感谢您的反馈和迅速反应和输入!

2

在xpaht表达式中有复杂的条件没有问题。 但是你的例子由于一些错误而无法工作。
*某些括号(])缺失
*您的示例x​​ml中没有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' ]"); 
+0

感谢hr_117您的输入! – user2353545 2013-05-09 07:49:07

+1

如果这是您要找的内容,请将我的答案或您自己的答案标记为已接受。 (比别人知道这个问题解决了) – 2013-05-09 08:04:11