Учитывая пример XML-данных:
<root>
<a>
<id>1</id>
<status>on</status>
<level>4</level>
<otherData>asdfasdfsdfvasdF</otherData>
<b>
<name>A1</name>
</b>
</a>
<a>
<id>2</id>
<status>on</status>
<level>8</level>
<otherData>asdfasdfsdfvasdF</otherData>
<b>
<name>TEST</name>
</b>
</a>
<a>
<id>3</id>
<status>off</status>
<level>2</level>
<otherData>asdfasdfsdfvasdF</otherData>
<b>
<name>A1</name>
</b>
</a>
</root>
Я хотел бы написать выражение XPath, которое будет иметь оценку:
1 on
3 off
То есть я хотел бы извлечьтекст узла id
и объединить его с узлом status
.Есть дополнительное условие: я хочу сделать это только для случаев, когда name
- «А1».Выражение XPath для получения id
таково:
//name[text()="A1"]/../../id/text()
И вот попытка объединить id
с его родным братом status
, который не работает.
//name[text()="A1"]/../../concat(id/text() , status/text())
Возможно ли то, что я пытаюсь сделать?И если да, какое будет правильное выражение XPath?
Чтобы уточнить: я не делаю никаких преобразований с этим выражением, я просто подключаю его к оценщику выражений XPath (например, вNotepad ++ или JEdit - с помощью плагинов) для отладки незначительных ошибок данных в очень больших файлах XML.В этом примере некоторые комбинации id
и status
могут быть неправильными, если дочерний элемент b
имеет name="A1"
, поэтому я пытаюсь найти их все с помощью одного простого выражения, а не прокручивать файл вручную.