XPath для выбора элемента по значению атрибута

у меня есть следующий 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, не уверен, где проблема.

2 ответов


вам нужно удалить / до [. Предикаты (части в [ ]) не должны иметь косые черты непосредственно перед ними. Кроме того, чтобы выбрать сам элемент Employee, вы должны оставить /text() в конце или иначе вы просто выбираете текстовые значения пробелов непосредственно под элементом Employee.

//Employee[@id='4']

Edit: как указывает Йенс в комментариях,// может быть очень медленным, потому что он ищет всю документ для сопоставления узлов. Если структура документов, с которыми вы работаете, будет согласованной, вам, вероятно, лучше всего использовать полный путь, например:

/Employees/Employee[@id='4']

попробуйте сделать это :

/Employees/Employee[@id=4]/*/text()