아래 양식을 작성하기 위해 양식에 대한 데이터를 가져오고 싶습니다. 그것은 작동하지 않았다.
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]");