У меня есть XML.
<?xml version="1.0" encoding="UTF-8"?>
<Employees>
<Employee id="3">
<age>40</age>
<name>Tom</name>
<gender>Male</gender>
<role>Manager</role>
</Employee>
<Employee id="4">
<age>25</age>
<name>Meghna</name>
<gender>Female</gender>
<role>Manager</role>
</Employee>
</Employees>
Я хочу выбрать элемент Employee с id = "4".
Я использую ниже выражение XPath, которое ничего не возвращает.
//Employee/[@id='4']/text()
Я проверил его на http://chris.photobooks.com/xml/default.htm, и он говорит о недопустимом xpath, не уверен, в чем проблема.
Вам нужно удалить /
перед [
. Предикаты (части в [
]
) не должны иметь следов непосредственно перед ними. Кроме того, чтобы выбрать сам элемент Employee, вы должны оставить в конце /text()
в конце или иначе вы просто будете выбирать значения текста в виде пробелов непосредственно под элементом Employee.
//Employee[@id='4']
Изменить: Как отмечает Йенс в комментариях, //
может быть очень медленным, потому что он ищет весь документ для сопоставления узлов. Если структура документов, с которыми вы работаете, будет последовательной, вам, вероятно, лучше всего использовать полный путь, например:
/Employees/Employee[@id='4']
Попробуйте сделать это:
/Employees/Employee[@id=4]/*/text()
//
выбирает и ищет по всем узлам документа, что может быть медленным. Вместо этого, если структура документа известна, используйте правильный путь, как предложено в ответе Жиля ниже.