C# 使用筛选器选择节点

C# 使用筛选器选择节点,c#,xml,xpath,selectnodes,C#,Xml,Xpath,Selectnodes,以下是我的xml: <Instrument RecordCount="3" > <Department id = 18384, Sequence=1> <InstrumentData StatusCode="1" RoleType="ED" Style="X" DataOther='Data'> </Department> <Department id = 18465, Sequence=2> <Inst

以下是我的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。选择节点(@”//Department[InstrumentData/@Status='1'
或部门[InstrumentData/@Status='1'
而不是(部门[InstrumentData/@RoleType='E'
或部门[InstrumentData/@RoleType='F')
和(部门[InstrumentData/@Style='S'
或部门[InstrumentData/@Style='T')
]“,经理);

或者首先需要获取第一个条件,然后构建xml文档,然后获取下一个条件


谢谢。

在xpaht表达式中使用复杂条件没有问题。 但由于某些错误,您的示例无法运行。
*缺少一些括号(
]
) *示例xml中没有状态属性。
*您不能使用“或”组合注释列表

例如: 如果您尝试获取具有
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' ]");
或者(在我看来更好):


在xpaht表达式中使用复杂条件没有问题。 但由于某些错误,您的示例无法运行。
*缺少一些括号(
]
) *示例xml中没有状态属性。
*您不能使用“或”组合注释列表

例如: 如果您尝试获取具有
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' ]");
或者(在我看来更好):


设法使其工作:

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

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

设法让它工作起来:

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

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

很抱歉,这绝对是一团乱麻。您的xml格式不正确。您的xpath表达式缺少很多括号。但这是我的问题,我是否可以按照上述条件依次串接以获得所需的结果?更新的xml:“很抱歉,这是一个绝对错误。”ute混乱。您的xml格式不正确。而且您的xpath表达式缺少很多括号。但这是我的问题,我是否可以将上述条件串在一起以获得所需的结果?更新的xml:“如果这是您正在寻找的,请将我的答案或您自己的答案标记为已接受。”。(比其他人知道这个问题已经解决)如果这是你想要的,请将我的答案或你自己的答案标记为已接受。(比其他人知道这个问题已经解决)