2012-06-21 83 views
0

獲取所需的節點我有一個結構如下的對象:C#:使用XPath

<ROOT> 
<MESSAGE> 
<some_fields /> 
<myDate> 
<myParameter> 
</MESSAGE> 
<MESSAGE> 
... 
</ROOT> 

我想其中指明MyDate> =定日期和myParameter =給定參數的所有消息的節點。 也就是說像這樣:

MyDoc.SelectNodes("/ROOT/MESSAGE..") 

是否有可能使用XPath做到這一點?

=================

好的。 myDate已經鍵入xs:dateTime。但現在我有一個異常:

//消息[指明MyDate < XS:DATETIME(2012-06-22T11:17:44)」有一個無效 合格的名稱。

代碼是:

XmlNodeList nodeList = MyXmlDocument.SelectNodes("//MESSAGE[myDate < xs:dateTime(" + givenDateTime + ")]"); 

而且它不與

"//MESSAGE[xs:dateTime('2012-06-22T11:47:32')=xs:dateTime('2012-06-22T11:47:32')]" 

然後,我有System.Xml.XPath.XPathException甚至工作:

命名空間管理或需要XsltContext。該查詢具有前綴 變量或用戶定義的函數。

回答

1

我會推薦使用LINQ。

你可能有這樣的事情

var nodes = from node in XDoc.Root.Elements("MESSAGE") 
      where (DateTime)node.Element("myDate") >= DateTime.Now 
      select node; 

這將選擇節點的元素,其中指明MyDate時間爲當前日期時間或將來。您可能希望進一步瞭解使用LINQ進行XML解析。我發現它是XML解析的首選方法。

你又如:

var nodes = from node in XDoc.Root.Elements("MESSAGE") 
       where (DateTime)node.Element("myDate") >= DateTime.Now 
       && node.Element("myParameter").Value == "whatever" 
       select node; 
1

是的,這是非常可能的。請通過以下鏈接,您可以獲得所有您需要的操作員。

http://msdn.microsoft.com/en-us/library/aa226440(v=sql.80).aspx

http://www.javabeat.net/2009/03/how-to-query-xml-using-xpath/

+0

能否請您給我一個例子,如何在約會工作這條路?就像「/ ROOT/MESSAGE [myDate> =」+ DateTime.Now.ToString(「s」)+「]」? – Ksice

+0

請看folloding msdn博客:http://blogs.msdn.com/b/healthvault/archive/2011/03/15/xpath-query-for-date-ranges.aspx –

2

可以在XPATH純粹做:

MyDoc.SelectNodes("//MESSAGE[xs:date(./[email protected]()) > xs:date('given date') and myParameter[text()='given parameter']]") 

[未經測試]

+0

請看我的加入 – Ksice