XPath를 사용하여 깊이의 자식 요소를 어떻게 선택합니까?


101

이것이 (간체) 있다고 가정합니다.

<form id="myform">
    <!-- some input fields -->
    <input type="submit" value="proceed"/>
</form>

그런 다음 XPath로 제출 버튼을 선택할 수 있습니다 //form[@id='myform']/input[@type='submit']. 큰.

그러나 내 템플릿이 변경 될 수 있으며 제출 버튼이있는 깊이를 유연하게 만들고 싶습니다. 다음과 같이 테이블에 넣을 수 있습니다.

<form id="myform">
    <!-- some input fields -->
    <table><tr><td>
           <input type="submit" value="proceed"/>
    </td></tr></table>
</form>

나는 손자 인 요소를 선택할 수 있다는 것을 알고 있지만, 어떤 깊이의 손자 손녀 ...- 자녀를 선택할 수는 없습니다. 예 :

  • //form[@id='myform']/*/input[@type='submit'] 더 이상 깊이가 아닌 손자 만 선택합니다.
  • //form[@id='myform']/*/*/input[@type='submit'] 더 이상 또는 더 적은 깊이가 아닌 손자 손녀 만 선택합니다.
  • //form[@id='myform']/**/input[@type='submit'] 유효하지 않습니다.

그렇다면 요소 ID를 사용하지 않고 어떻게이 제출 버튼을 안정적으로 선택합니까?

답변:


159

거의 완료되었습니다. 간단히 사용 :

//form[@id='myform']//input[@type='submit']

//바로 가기는 식 내에서 사용할 수 있습니다.


C #은이 표기법을 이해하지 못하는 것 같습니다. //form//input크롬 같은 XPath를 사용하여 35 개 입력을 찾을 수있는 반면 수익률은 C #으로 널 (null)
아킬레스

1
내 마지막 의견은 여기에 설명되어 있습니다 : stackoverflow.com/questions/23232671/…
Achilles

14

XmlDocument 및 XmlNode를 사용하는 경우.

말하다:

XmlNode f = root.SelectSingleNode("//form[@id='myform']");

사용하다:

XmlNode s = f.SelectSingleNode(".//input[@type='submit']");

사용하는 도구에 따라 다릅니다. 그러나 .//는 참조 노드에서 모든 자식, 깊이를 선택합니다.


앞서 추출한 특정 XML 노드에서 SelectSingleNode 명령을 사용하여 Powershell 내에서 잘 작동합니다.
Gizmo3399


0

또한 CSS 선택기로 할 수 있습니다.

form#myform input[type='submit']

css elector에서 요소 사이의 공백은 상위 양식의 모든 깊이에서 해당 요소를 검색하는 것을 의미합니다. # myform 요소

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.