HTML 민첩성 팩을 사용하여 상위 태그와 하위 태그를 구문 분석

asp.net html html-agility-pack

문제

HTML 민첩성 팩을 사용하여 HTML 양식을 구문 분석하려고합니다. <p>Some Text</p> 그러나 다음과 같이 가정합니다. <p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>

HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants(controlName).ToArray() 사용하여 컨트롤의 모든 값을 가져옵니다 (우리의 경우 p와 span). 그러나 이것은 단지 범위에있는 텍스트를 가져 오는 것입니다.

tage ( "p"와 "span")의 값을 어떻게 얻을 수 있습니까?

업데이트 : 코드를 통해 리소스 파일과 키가 생성되는 다국어 응용 프로그램을 개발하려고합니다. 위의 예에서는 3 개의 키를 생성해야합니다. 1 - "p 태그의 일부 텍스트", 2 - "span 태그의 일부 텍스트" 및 3 - "다시 p 태그의 일부 텍스트." 어떻게 이러한 키를 만들 수 있습니까? 현재 시나리오는 p 태그가 아닌 span 태그의 키를 생성한다는 것입니다.

미리 감사드립니다.

인기 답변

사실 그 질문은 분명하지 않습니다. <p><span> 가치를 얻으려는 방법을 보여주는 관련 코드를 게시해야합니다.

이 것은 <p><span> 모두에서 텍스트를 얻기 위해 잘 작동했습니다 :

var html = @"<p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("p").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("span").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}

이 단일 foreach 루프에 의해 산출 된 동일한 출력은 다음과 같습니다.

var html = @"<p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("p").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("span").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}

또는 태그 이름을 실제로 신경 쓰지 않는다면 다음과 같이 모든 요소를 가져올 수 있습니다.

var html = @"<p>Some Text in p Tag<span>Some text in span tag.</span> Again some text in p tag</p>";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("p").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}
foreach (HtmlNode nodeItem in htmlDoc.DocumentNode.Descendants("span").ToArray())
{
    Console.WriteLine(nodeItem.InnerText);
}

위의 샘플 중 어느 것도 유용하지 않은 경우 해결하려는 실제 문제에 대해 자세히 설명하도록 질문을 업데이트하십시오.




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