HtmlAgilityPack을 사용하여 노드에서 텍스트 가져 오기

c# html-agility-pack xpath

문제

나는 다음과 같은 HTML을 가지고있다 :

<div class="top">
    <p>Blah.</p>
    I want <em>this</em> text.
</div>

" I want <em>this</em> text. " I want <em>this</em> text. 문자열을 추출하는 XPath 표기법은 무엇입니까? 편집 : 반드시 문자열을 추출하는 단일 XPath식이 필요하지 않습니다. 여러 노드를 선택하고 문장을 생성하기 위해 노드를 반복하면 좋을 것입니다.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(myHtml);
doc.DocumentNode.SelectSingleNode("??????");

수락 된 답변

노드 나 문자열을 추출 할 대상은 무엇입니까?

노드를 원하면 "I want <em>this</em> text."두 텍스트 노드 의 최상위 레벨에 구성된 XML 단편 텍스트 노드 하위가있는 <em> 요소 입니다. 최상위 레벨에 여러 개의 노드가 있기 때문에 SelectSingleNode() 대신 SelectNodes("xpath expression a la @Alejandro") SelectSingleNode() 합니다.

문자열을 원하면 다시 SelectNodes ()를 사용해야합니다. 선택한 노드를 반복하고 각 노드의 outerHTML을 연결합니다. 비슷한 것을 보여주는 좋은 예를 보려면 여기 를 참조 하십시오 .

또한 XPath 표현식이 일반적으로 원하는 것을 제공 할 것인지는 예제에서 약간 분명하지 않습니다. 예를 들어 <div class="top"> 아래의 초기 <p>...</p> 이후 모든 것을 원하십니까? 아니면 모든 <p> 요소를 제외하고 <div> 아래에 모든 텍스트를 원하십니까? 아니면 다른 뭔가? 물론 @ Alejandro의 XPath 표현이 당신을 위해 작동한다면 이미 충분히 잘 지정되어 있습니다.


인기 답변

/div[@class='top']/p[.='Blah.']/following-sibling::node()

또는

/div[@class='top']/node()[not(self::p)]



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