2013-05-08 123 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