Подтвердить что ты не робот

Как выбрать дочерние элементы любой глубины с помощью 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'] выбирает только grand-grand-children, без дальнейших или меньших глубин.
  • //form[@id='myform']/**/input[@type='submit'] недействителен.

Итак, как я могу правильно выбрать эту кнопку отправки без использования идентификаторов элементов?

4b9b3361

Ответ 1

Ты почти там. Просто используйте:

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

Ярлык // также может использоваться внутри выражения.

Ответ 2

Если вы используете XmlDocument и XmlNode.

Скажи:

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

Использование:

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

Это зависит от используемого вами инструмента. Но.//выберет любой ребенок, любую глубину из ссылки node.

Ответ 3

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