2015-03-27 8 views
1

Приветствия на день.Выбор значения XML-элемента с использованием XPATH

Я хочу выбрать конкретное значение элемента, когда определенное условие соответствует.

Вот мой код:

<root> 
    <companies> 
    <company id="6">Tata Consultancy Services</company> 
    <company id="7">Wipro</company> 
    <company id="8">Infosys</company> 
    <company id="9">Microsoft</company> 
    <company id="10">IBM</company> 
    <company id="11">Apple</company> 
    <company id="12"> Oracle 
     <SubCompany> 
     <company id="12.1">OracleSubCorporation</company> 
     </SubCompany> 
    </company> 
    </companies> 
</root> 

Вот мимо, я хочу, чтобы выбрать значение тега, значение которого должно быть «Oracle». Обратите внимание, что каждый элемент может иметь «n» уровень дочерних элементов.

Так что мой XPATH запрос:

/root/companies/company/[normalize-space(text())='Oracle'] 

Но я, имеющий ошибку как «не в состоянии оценить запрос», при этом.

Могу ли я узнать, как достичь этого текущего запроса.

Заранее спасибо.

+0

Не специалист и было некоторое время, так как я использовал XPath, но я думаю, что вы можете получить доступ ко всем узлам компании с // компании? Таким образом, вы можете получить все компании под названием Oracle, такие как // company [normalize-space (text()) = 'Oracle']. Может быть, неправильно –

ответ

0

Ваше выражение является недействительным из-за дополнительной слэш:

/root/companies/company/[normalize-space(text())='Oracle'] 
        HERE^ 

Demo (с использованием xmllint):

$ xmllint test.xml --xpath "/root/companies/company/[normalize-space(text())='Oracle']" 
XPath error : Invalid expression 
/root/companies/company/[normalize-space(text())='Oracle'] 
         ^
xmlXPathEval: evaluation failed 
XPath evaluation failure 

$ xmllint test.xml --xpath "/root/companies/company[normalize-space(text())='Oracle']" 
<company id="12"> Oracle 
    <SubCompany> 
    <company id="12.1">OracleSubCorporation</company> 
    </SubCompany> 
</company> 
0

У вас есть дополнительные/в вашем запросе XPath, после компании. Предикат (часть в []) должен быть самой компанией элемент, вы ищете элементы компании с текстовым содержанием права «Oracle» ?, так что предикат должен быть на фирменном элементе:

/root/companies/company[normalize-space(text())='Oracle'] 

вы можете получить доступ ко всем компаниям, т.е. также возвращать суб-компаний под названием «Oracle» с помощью:

//companies//company[normalize-space(text())='Oracle'] 
Смежные вопросы