2012-06-21 2 views
-2

나는 어쩌면 어리석은 질문을 가지고있다.XPath로 XML 구문 분석. C#

나는 URL을 가지고 : http://flibusta.net/opds/opensearch?searchTerm=Тол&searchType=books

을하고이 같은 응답 구문 분석 할 :

string search_link = "http://flibusta.net/opds/opensearch?searchTerm=Тол&searchType=books"; 

_document = new XPathDocument(search_link); 

XPathNavigator navigator = _document.CreateNavigator(); 
XmlNamespaceManager ns = new XmlNamespaceManager(navigator.NameTable); 
XPathNodeIterator nodes = navigator.Select("/feed/title"); 

while (nodes.MoveNext()) 
{ 
     XPathNavigator currentNavigator = nodes.Current; 
     string title = currentNavigator.Value; 
     Trace.WriteLine(title); 
} 

그러나 노드가 제로 결과를 반환합니다. 내가 뭘 잘못하고 있는지 이해할 수는 없어.

감사합니다.

파벨.

+1

이러한 노드는 네임 스페이스에 있으므로 선택 인수로 지정해야합니다. navigator.Select ("/ myns : feed/myns : title"); –

+0

링크가 작동하지 않는 것 같습니다. 그리고 기회가 있습니다.이 질문이 스택 오버플로에 존재하는 한 계속 작동하지 않습니다. 따라서 XML의 작은 예를 보여줄 수 있다면 실제 질문을 파싱하기를 원한다면 도움이 될 것입니다. –

+0

1) 어떤 네임 스페이스에도 없습니다. – korovaisdead

답변

5

네임 스페이스가없는 XML은 잊어 버리십시오. 다음 예제를 시도해보십시오. 내게 잘 작동합니다.

var document = new XPathDocument("http://flibusta.net/opds/opensearch?searchTerm=%D0%A2%D0%BE%D0%BB&searchType=books"); 
XPathNavigator navigator = document.CreateNavigator(); 
var ns = new XmlNamespaceManager(navigator.NameTable); 
ns.AddNamespace("atom", "http://www.w3.org/2005/Atom"); 

XPathNodeIterator nodes = navigator.Select("/atom:feed/atom:title", ns); 

while (nodes.MoveNext()) 
{ 
     XPathNavigator currentNavigator = nodes.Current; 
     string title = currentNavigator.Value; 
     Trace.WriteLine(title); 
} 
+0

OP가 자신의 네임 스페이스를 선언하지 않았거나 NamespaceManager를 'Select (...)'로 전달하지 않은 것 같습니다. – Nathan

+0

감사합니다! 잘 작동합니다! – korovaisdead