2015-04-09 4 views
0

Мне нужно написать выражение XPATH, которое будет обрабатывать необязательные элементы следующим образом: если элемент найден, верните элемент, если он не найден, верните пустое значение (или некоторая константа будет в порядке и)XPath Дополнительные поля

Пример XML с дополнительным элементом "адрес":

<account><name>Foobar</name><address>34 State St</address></account> 
<account><name>Simpson</name></account> 
<account><name>Cole</name><address>45 Main St</address></account> 

бы нужно вернуть:

"34 State St",,"45 Main St" 
or 
"34 State St",constant,"45 Main St" 

ответ

2

в XPath 2.0 это легко с помощью if :

account/(if (address) then string(address) else '') 

Но в XPath 1.0 это не возможно в одном выражении, так как XPath 1.0 не имеет понятия упорядоченных последовательностей атомарных значений - можно выбрать только наборы узлов. Вы можете извлечь набор элементов account с использованием выражения XPath 1.0, но тогда вам нужно будет перебирать этот набор узлов в вашей среде хоста и искать по address для каждого отдельно.

+0

@ MatthiasMüller, который заботится о if-then-else, но не помогает с фундаментальной проблемой, что в XPath 1.0 нет атомных последовательностей и нет способа сделать понимание последовательности на уровне XPath. –

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