2011-10-10 2 views
0
내가 XPath를 사용하여 간단한 검색을 수행 할

이 내 XML enter image description hereC#의 XPath는 검색

이고 나는 타임 노드를 검색하고 결과로 아이디 노드 값을 반환하려면 .

이 내 코드는 지금까지입니다,하지만 난 어떤 결과

XmlNodeList nList = xmlDoc.SelectNodes("//spEvents:Time[. = '" + eventId + "']/parent::node()/spEvents:Times/spEvents:EventTime/spEvents:Time", xmlnsManager); 

얻을 그나마 내 코드가 잘 작동하고,

감사 KB

@ 존 (내가 네임 스페이스를 사용하고 있습니다)

return (from feed in xmlDoc_Spektrix.Descendants("Event") 
           from et in feed.Element("Times").Elements("EventTime") 
           where Convert.ToDateTime(et.Element("Time").Value).ToShortDateString() == Convert.ToDateTime(dt).ToShortDateString() 
       select feed.Element("Id").Value).ToList(); 

과 같이 XML을 LINQ와 함께 사용하지만 네임 스페이스가 전자는 XML 피드에 도입, 내 코드가 더 이상 작동하지 않습니다, 왜 내가 xpath로 전환했다

이 코드는 잘 작동하는 데 사용되는이 코드는 네임 스페이스와 함께 작동을 멈출 이유를 알고 있습니까?

+1

XLinq에 액세스 할 수있는 .Net 2.0 또는 3.5 이상입니까? – user7116

+0

이 스크린 샷의 네임 스페이스를 볼 수 없습니다. XML을 텍스트로 게시하십시오. –

+3

xpath를 사용해야합니까? 개인적으로 LINQ to XML을 사용하면 이해하기 쉽고 올바르게 이해할 수 있습니다. –

답변

3

"네임 스페이스가 내 쿼리를 깨뜨린 것"에 대한 올바른 응답은 "기술 변경"이 아니라 "쿼리 수정"입니다. 이 XML에 LINQ와 정말 간단하다뿐만 아니라 XElementDateTime

// I'm guessing the namespace *really* has the http part on... 
XNamespace ns = "http://system.spektrix.com/api/v1/events"; 

return (from feed in xmlDoc_Spektrix.Descendants(ns + "Event") 
     from et in feed.Element(ns + "Times").Elements(ns + "EventTime") 
     where (DateTime) et.Element(ns + "Time") == dt 
     select feed.Element(ns + "Id").Value).ToList(); 

참고 단순화 (문화 변화의 얼굴에 더 정확한) 변환.

+0

아직 귀하의 솔루션을 테스트하지 않았으므로, 그러나 나는 그 정확한 것을 짐작하고있다 & 나는 내가이 시간 전에 게시했다는 것을 바란다, 나는 기울인다 내가 그것을 놓쳤다라고 생각한다! !! 덕분에 많이 –

+1

@kb : XML에 LINQ로 XML 네임 스페이스를 쉽게 만들 수있는 API를 아직 보지 못했습니다. –

+0

감사합니다. –

0

샘플을 기반으로 질문을 올바르게 이해하면이 XPath가 작동 할 수 있습니다. XPath를 시험해보고 싶다면 FirePath 플러그인으로 FireFox에서 xml을 열 수 있습니다.

//spEvents:Id[./following-sibling::spEvents:Times/spEvents:time[contains(text(),'yourtimetext')]]