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

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

<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를 사용하지 않고 어떻게이 제출 버튼을 안정적으로 선택합니까?



답변

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

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

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


답변

XmlDocument 및 XmlNode를 사용하는 경우.

말하다:

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

사용하다:

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

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


답변

//form/descendant::input[@type='submit']


답변

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

form#myform input[type='submit']

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


답변