Как выбрать дочерние элементы любой глубины с помощью 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>
Я знаю, что могу выбрать элементы, которые являются внуками, но я не могу выбрать grand-grand-grand-...-детей любой глубины. Например:
-
//form[@id='myform']/*/input[@type='submit']
только выбирает внуков, больше никаких глубин. -
//form[@id='myform']/*/*/input[@type='submit']
только выбирает внуков-внуков, не дальше или меньше глубины. -
//form[@id='myform']/**/input[@type='submit']
недопустимо.
Итак, как я могу выбрать эту кнопку отправки надежно без использования идентификаторов элементов?
4 ответа:
вы почти там. Просто используйте:
//form[@id='myform']//input[@type='submit']
The
//
ярлык также может быть использован внутри выражения.
Если вы используете XmlDocument и XmlNode.
говорят:
XmlNode f = root.SelectSingleNode("//form[@id='myform']");
использование:
XmlNode s = f.SelectSingleNode(".//input[@type='submit']");
Это зависит от инструмента, который вы используете. Но.// будет выбирать любой дочерний элемент, любую глубину из ссылочного узла.