HTML 민첩성 팩으로 양식 파싱

c# html-agility-pack

문제

양식에서 모든 입력 요소를 추출하려고합니다. 다음 형식을 구문 분석 할 때 :

<form>
<input name='test1' type='text'>
<input name='test2' type='text'>
<input name='test3' type='text'>
</form>

모든 것이 완벽하게 작동했기 때문에 HTML Agility Pack은 양식의 입력 요소를 감지 할 수 있었지만 다음과 같은 div 상위 노드가 있으면 감지되지 않습니다.

<form>
<input name='test1' type='text'>
<input name='test2' type='text'>
<input name='test3' type='text'>
</form>

다음 코드를 사용하고 있습니다.

<form>
<input name='test1' type='text'>
<input name='test2' type='text'>
<input name='test3' type='text'>
</form>

누가 잘못되었는지 말해 줄 수 있습니까? 감사

수락 된 답변

HtmlNode.Elements 메서드는 이름과 일치하는 1 세대 자식 노드를 HtmlNode.Elements . 입력을 <div> 태그 안에 넣으면 양식 요소의 2 세대 하위 노드가됩니다.

코드 작업이 HtmlNode.Descendants 메소드를 사용하여 이름이 일치하는 모든 자손 노드를 가져 HtmlNode.Descendants .

foreach (HtmlAgilityPack.HtmlNode node in postForm.Descendants("input"))
{
   HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"];
}

인기 답변

Elements() Descendants() 대신 Descendants() 를 사용하십시오. - 직접 자식에서만 작동하지만 입력 요소는 div 내에 중첩됩니다.

 foreach (HtmlAgilityPack.HtmlNode node in postForm.Descendants("input"))
 {
     HtmlAgilityPack.HtmlAttribute valueAttribute = node.Attributes["value"];
 }



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