2012-06-21 3 views
0

를 사용하여 필요하기 노드는 I는 다음 구조 XMLDocument 객체가 있습니다. 즉, 예 :C 번호 :</p> <pre><code><ROOT> <MESSAGE> <some_fields /> <myDate> <myParameter> </MESSAGE> <MESSAGE> ... </ROOT> </code></pre> <p>내가 날짜와 myParameter = 주어진 매개 변수를 제공 MyDate가> = 모든 메시지 노드를 얻으려면 : XPath를

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

XPath를 사용하여 가능합니까?

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

확인. myDate는 이미 xs : dateTime을 입력했습니다.

// MESSAGE [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를 사용하는 것이 좋습니다.

당신은 MyDate가 시간이 현재 날짜 시간 또는 미래에있는 노드 요소를 선택할 것이다

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

이 같은 것을 가질 수 있습니다. 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

관련 문제