XpathNavigator 및 HtmlAgilityPack을 사용하여 InnerHtml 값 찾기

c# html-agility-pack xpathnavigator

문제

test.xml의 일부

<tr class="a"> 
    <td align="left" nowrap="true">desc1</td> 
    <td align="left">desc2</td>  
    <td>desc3</td>  
    <td align="left">desc4</td> 
    <td align="left">desc5</td>
    <td>desc6</td> 
    <td>desc7</td> 
    <td>desc8</td>
    <td class="nr">desc9</td>
</tr>

// XpathNavigator를 만들어서 td 내에서 마지막 값을 얻는다. desc9

> HtmlDocument document = new HtmlDocument();
        document.Load(Server.MapPath("test.xml"));

        XPathNavigator xPathNavigator = document.CreateNavigator();
        object o = xPathNavigator.Evaluate("/table[1]/tbody[1]/tr[2]/td[9]");

디버거는 값이 다음과 같이 계산 될 수 있음을 보여줍니다. 이는 매우 귀찮습니다.

((HtmlAgilityPack.HtmlNodeNavigator)((new System.Linq.SystemCore_EnumerableDebugView(((MS.Internal.Xml.XPath.XPathSelectionIterator)(o)))).Items[0])).Value

desc9에 도달하는 가장 좋은 방법은 무엇입니까?

수락 된 답변

나는 XPathNavigator를 사용하지 않았지만 SelectNodes / SelectSingleNode 스타일과 HTML Agility Pack과 비슷한 솔루션을 제공합니다.

string xPathSearch = "/table[1]/tbody[1]/tr[2]";
HtmlNode tableRow = doc.DocumentNode.SelectSingleNode(xPathSearch);
string description9 = tableRow.ChildNodes[9].InnerText;

또는

string xPathSearch = "/table[1]/tbody[1]/tr[2]/td[9]";
HtmlNode tableColumn = doc.DocumentNode.SelectSingleNode(xPathSearch);
string description9 = tableColumn.InnerText;

참고 - HTML 민첩성 팩에 대한 최고의 문서는 소스에 포함 된 샘플 인 것으로 보입니다. 이것이 문서에서 별도의 다운로드가 아닌 이유를 확신하지 못합니다.


인기 답변

나는 당신이이 잘못에 대해 생각하고 있다고 생각합니다.

나는 당신이해야 할 일은 다음과 같은 것을 믿습니다.

document.DocumentNode.SelectSingleNode("/table[1]/tbody[1]/tr[2]/td[9]");

내가 당신에게 연결하는 문서의 온라인 사본을 찾을 수 없지만 자세한 내용은 http://htmlagilitypack.codeplex.com/releases/view/44954 에있는 문서를 확인할 수 있습니다.

또한 XML을 읽는 경우 html 민첩성 팩을 사용하는 이유가 무엇인지 또는 유효한 XML 만 테스트 파일입니까?




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.