htmlagilitypack의 양식에서 필드 가져 오기

html-agility-pack

문제

아래 양식을 작성하기 위해 양식에 대한 데이터를 가져오고 싶습니다. 그것은 작동하지 않았다.

doc.DocumentNode.SelectNodes("//form[@name='F1']//input[@name]");

2 단계로 나누면

var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes("//input[@name]");

그러나 예기치 않은 노드 / 양식보다는 전체 HTML 파일에서 데이터를 가져옵니다. 그 양식의 결과 만 얻으려면 어떻게해야합니까? 나는 /input[@name] null을 준 /input[@name].//input[@name]/input[@name] 시도했다.

인기 답변

이것이 Html Agility Pack의 <form> 태그 구문 분석에 대한 기본 동작 인 것 같습니다. 그들이 여기에서 말했듯 :

FORM은 많은 HTML 페이지가 중복 된 양식을 사용했기 때문에 이와 같이 취급됩니다. 원래 HTML의 (강력한) 기능 이었기 때문입니다. 이제 XML과 XHTML이 존재하기 때문에 모든 사람들이 겹치는 부분은 오류라고 가정하지만 HTML 3.2에서는 그렇지 않습니다.

다음을 사용하여 변경할 수 있습니다.

HtmlNode.ElementsFlags.Remove("form");

"//form[@name='F1']//input[@name]" 표현식이 작동해야합니다. 또는 두 번째 표현식을 ".//input[@name]" 으로 변경하면 작동합니다.

var node = doc.DocumentNode.SelectSingleNode("//form[@name='F1']");
var nodes = node.SelectNodes(".//input[@name]");


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