2013-07-10 10 views
0

Предположим, что у меня есть следующий XMLПолучить частичный узел в XPATH

<a> 
    <b></b> 
    <c></c> 
    <d></d> 
    <e></e> 
</a> 

Если я хочу, чтобы получить все дети кроме д. Для этого, я хотел бы использовать следующее:

/a/*[not(self::d)] 

Однако это вернется б, с и е в трех отдельных узлов. То, что я ищу, это только один узел, содержащий б, гр и е, за исключением д. Это будет что-то похожее на следующий псевдокод:

/a/* and <do not include /a/d please> 

Возможно ли это?

Спасибо.

+0

Невозможно в XPath 1.0. Для версии 2 я не знаю. – choroba

ответ

2

XPath - независимо от того, версия 1.0, 2.0 или 3.0 - может обрабатывать только поддеревья и не может модифицировать (включая удаление) или создавать новые элементы.

Для этой цели вам необходимо использовать XQuery или XSLT или изменить документ за пределами языка запросов и использовать XPath для выбора поддерева результата, затем использовать другой XPath для выбора узлов, которые вы не хотите, и удалить их из результат на языке программирования, который вы используете.

Смежные вопросы