2014-12-06 65 views
1

我寫這段代碼如何寫的XPath與價值匹配多個屬性的具體數值

("//series/@*[Place='" + place + "'] and [Date='"+date+"']") 

我的XML如下:

<series> 
<Note roll="2" place="OFFICE" Date="12/6/2014 12:00:00 AM"> 
<value>abc</value> 
</Note> 
<Note roll="2" place="bank" Date="11/6/2014 12:00:00 AM"> 
</Note> 
<value>abc</value> 
</series> 

我想找到有一些有價值的所有節點place= officedate =12/6/2014, 但它沒有給出正確的輸出。我究竟做錯了什麼?

+0

的XML是無效的。你有多個根元素,'Note'元素不會被終止。 – Guffa 2014-12-06 19:36:07

+0

謝謝@Guffa。但是,在終止音符元素之後,我仍然沒有得到正確的輸出。 – zombie 2014-12-06 19:41:33

+0

使用正確的XML可以針對不同的XPath表達式進行測試。 – Guffa 2014-12-06 20:13:37

回答

0

您不需要and運算符,只需將條件放在一起即可。

您應該選擇具有特定屬性值的節點(*[@...]),而不是選擇具有特定值的屬性(@*[...])。

例子:

/series/*[@place='bank'][@Date='11/6/2014 12:00:00 AM'] 

所以在代碼是:

("/series/*[@place='" + place + "'][@Date='" + date + "']") 

工作例如:

XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<series><Note roll=\"2\" place=\"OFFICE\" Date=\"12/6/2014 12:00:00 AM\"><value>abc</value></Note><Note roll=\"2\" place=\"bank\" Date=\"11/6/2014 12:00:00 AM\"></Note><value>abc</value></series>"); 

string place = "bank"; 
string date = "11/6/2014 12:00:00 AM"; 

XmlNodeList list = doc.SelectNodes("/series/*[@place='" + place + "'][@Date='" + date + "']"); 
Console.WriteLine(list.Count); // outputs 1 
+0

感謝你的朋友,但這不適用於我的情況:-) – zombie 2014-12-06 21:58:52

+0

@zombie:當我用你展示的XML進行測試時,它工作得很完美。如果在你的情況下它不起作用,那麼有些東西你沒有顯示。 – Guffa 2014-12-06 22:05:02

+0

它應該是「//系列[@ place ='」+ place +「'] | // series [@ Date ='」+ date +「']」..最後,問題解決了。好友。:-) – zombie 2014-12-06 22:06:14