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>

各ノードに @RoleType='E' および 'F' および @Style ='S' および 'T' ではなく、@Status 属性 ='1' または '2' が必要です。

次のステートメントがありますが、正しい結果が返されません。

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

xpath 式に複雑な条件があっても問題ありません。しかし、いくつかの間違いのためにあなたの例はうまくいきません。
* 一部の括弧 ( ]) が欠落してい
ます * サンプル xml に Status 属性がありません。
※「or」を使ってメモリストをまとめることはできません。

InstrumentData/@StatusCode = 2例: で Departments とで Departmentsを取得しようとする場合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 に答える