2016-07-06 6 views
0

Windows 범용 응용 프로그램을 작성 중이며 HTML 코드를 구문 분석하고 XPath로 데이터를 추출해야합니다. (Windows.Data.Xml.Dom의 XmlDocument를 사용하고 있습니다.)IXmlNode의 SelectNodes가 빈 XmlNodeList를 반환합니다.

하나의 노드 ("nPostingsRoot")를 선택하면 일부 자식 노드가 나타납니다. 그러나이 단일 노드의 루트에있는 모든 태그 목록을 얻으려고하면 빈 List가 생깁니다. /div/div/div/div[1]/div[2]/div/table/tbody/tr[2]/td/div[2]/b[1]

누군가가 나를 도울 수 :이 같은 나중에 일부 XPath의 문자열이 때문에 childNodes에 통해

반복하려면이 옵션을 선택하지 않습니다 (스크린 샷 참조)? 사전에

Screenshot

감사합니다!

+0

게시물에 [MCVE]를 제공해주십시오. –

답변

0

스크린 샷은 div 문서 노드의 하위 요소를 찾을 XPath /div을 보여줍니다. HTML. 서에서. 서 노드의 유일한 하위 요소는 html 요소입니다. 컨텍스트 노드의 자식 요소 div을 사용하려면 자손에 descendant::div 또는 .//div을 사용하려는 경우 div 경로 만 사용하면됩니다.

0

@Martin Honnen에 동의합니다. 또한 Html Code를 파싱하려면 HtmlAgilityPack for .NetCore을 사용하는 것이 좋습니다.

XmlDocument를 사용하여 Html을 구문 분석 할 때 약간의 문제가 발생했습니다 (나는 html 코드를 성공적으로 파싱하려면 <!DOCTYPE html>을 제거하거나 주석 처리해야합니다). 그러나 HtmlAgilityPack을 사용하는 동안 그런 문제는 없습니다.

은 사용 HtmlAgilityPack 아래의 코드를 사용할 수 있습니다 rootNode를 아래 사업부를 얻으려면 :

HtmlDocument htmlDoc = new HtmlDocument(); 
htmlDoc.LoadHtml(htmlStr); 
HtmlNode rootNode =htmlDoc.DocumentNode.SelectSingleNode("/html/body/div"); 
IEnumerable<HtmlNode> collection=rootNode.Descendants("div"); 

또는이 같은 자식 DIV 노드 얻기 위해 XPath를 사용할 수 있습니다

HtmlDocument htmlDoc = new HtmlDocument(); 
htmlDoc.LoadHtml(htmlStr); 
HtmlNode rootNode =htmlDoc.DocumentNode.SelectSingleNode("/html/body/div"); 
HtmlNodeCollection collection = rootNode.SelectNodes("div"); 

그리고 여기를 완료 됨 Demo