HI имеет следующий xml.
<filters>
<filter>
<field>
<name>empId</name>
<type>int</type>
</field>
<op>in</op>
<value>eID</value>
<valueType>PERI</valueType>
</filter>
<filter>
<field>
<name>desc</name>
<type>string</type>
</field>
<op>in</op>
<value>dbDesc</value>
<valueType>PERI</valueType>
</filter>
</filters>
Я хочу получить только элементы "name", "op" и "value". Iam, используя приведенное ниже выражение xpath. но не может исключить узлы "типа", которые находятся под элементом "field".
//filter//*[not(self::valueType)] and [not(following-sibling::type)]//text()
Мой вывод должен быть:
empId
in
eID
desc
in
dbDesc
Любая помощь?
Следующее выражение XPath выберет текст из всех элементов name
, op
или value
:
(//name|//op|//value)/text()
Я хочу имя, op, значение только из элемента filters.
Отрегулируйте XPath аналогично тому, как вы упомянули в своем комментарии:
(//filters//name|//filters//op|//filters//value)/text()
Или, более эффективно (при условии, что его затягивание не теряет совпадений в вашем общем случае):
(/filters/filter/field/name|/filters/filter/op|/filters/filter/value)/text()
Это должно работать:
//filter//*[self::name or self::op or self::value]/text()