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

c# html-agility-pack linq nodes xpath

문제

다음 HTML이 있다고 가정 해 보겠습니다.

<p id="definition">
    <span class="hw">emolument</span> \ih-MOL-yuh-muhnt\, <i>noun</i>:
    The wages or perquisites arising from office, employment, or labor
</p>

C #에서 HTMLAgilityPack을 사용하여 각 파트를 개별적으로 추출하려고합니다.

나는 쉽게 단어와 단어 수업을받을 수있다.

var definition = doc.DocumentNode.Descendants()
    .Where(x => x.Name == "p" && x.Attributes["id"] == "definition")
    .FirstOrDefault();

string word = definition.Descendants()
    .Where(x => x.Name == "span")
    .FirstOrDefault().InnerText;

string word_class = definition.Descendants()
    .Where(x => x.Name == "i")
    .FirstOrDefault().InnerText;

하지만 어떻게 발음이나 실제 정의를 얻을 수 있습니까? 이러한 노드 사이의 가을, 그리고 내가 defintion.InnerText 사용하면 한 문자열에 전체 많이 얻을. XPath 에서이를 수행 할 수있는 방법이 있습니까?

HtmlAgilityPack에서 노드 사이의 텍스트는 어떻게 선택합니까?

수락 된 답변

XPath에서이를 수행 할 수있는 방법이 있습니까?

예 - 아주 쉬운 것입니다.

이해해야 할 핵심 개념은 텍스트 노드와 자식 요소 노드가 XML / HTML로 구성되는 방식이며 따라서 XPath로 구성됩니다.

요소의 텍스트 내용이 자식 요소에 의해 강조 표시되면 개별 텍스트 노드로 끝납니다. 위치에 따라 개별 텍스트 노드에 액세스 할 수 있습니다.

모든 요소에서 text() 를 사용하면 모든 하위 텍스트 노드가 검색됩니다. 표시 한 스 니펫에 //p/text() 를 적용하면 각 결과가 ------- 구분됩니다.

[EMPTY TEXT NODE, EXCEPT WHITESPACE]
-----------------------
\ih-MOL-yuh-muhnt\,
-----------------------
:
The wages or perquisites arising from office, employment, or labor

p 요소의 첫 번째 텍스트 노드는 공백 만 포함하므로 아마도 여러분이 겪은 것이 아닙니다. //p/text()[2] 가져 오기

  \ih-MOL-yuh-muhnt\,

//p/text()[3] :

:
The wages or perquisites arising from office, employment, or labor

인기 답변

        HtmlNode text = doc.DocumentNode.Descendants().Where(x => x.Name == "p" && x.Id == "definition").FirstOrDefault();

        foreach (HtmlNode node in text.SelectNodes(".//text()"))
        {
            Console.WriteLine(node.InnerText.Trim());
        }

출력은 다음과 같습니다.

  1. 소득
  2. \ ih-MOL-yuh-muhnt \,
  3. 명사
  4. :
  5. 사무실, 고용 또는 노동에서 발생하는 임금 또는 특혜

2. \ih-MOL-yuh-muhnt\, 결과. 니가 필요해.

HtmlNode a = text.SelectNodes(".//text()[2]").FirstOrDefault();


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