Ответ 1
Вы можете использовать функцию count
- прохождение по пути узлов, которые вы проверяете.
Если они не существуют, то значение count
будет 0:
count(//Filename) = 0
У меня возникли проблемы с поиском правильного синтаксиса XPath, чтобы проверить, существует ли какой-либо конкретный node в моем XML. Мне разрешено использовать XPath (так что нет XSL или что-то еще подобное, это должен быть чистый синтаксис выражения XPath).
У меня есть XML и он имеет node Filename
, но он не существует в каждом случае. Когда имя файла не указано, мои процессы LiveCycle будут использовать другой маршрут для заполнения имени файла. Но как проверить, существует ли Filename
node?
Вы можете использовать функцию count
- прохождение по пути узлов, которые вы проверяете.
Если они не существуют, то значение count
будет 0:
count(//Filename) = 0
Подобно счету, но, возможно, более прямому в зависимости от того, что вы хотите, является функция boolean
boolean(//Filename)
Это возвращает true, если существует "Имя файла" node и false, если нет.
Предположим, что у вас есть следующий XML-документ:
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
, то это выражение XPath выбирает либо элемент filename
, когда он присутствует, либо элемент default
, если не указан элемент filename
:
(/*/function/filename
|
/*/function/default
)
[1]
Самый короткий способ проверить, существует ли элемент filename
::
/*/function/filename
Итак, первое выражение XPath можно было переписать в эквивалентном (но несколько дольше):
/*/function/filename
|
/*/function/default[not(/*/function/filename)]
Учитывая пример Xml из другого ответа
<top>
<function>
<filenamex>c:\a\y\z\myFile.xml</filenamex>
<default>Default.xml</default>
</function>
</top>
Я счел нужным ответить здесь, поскольку другие ответы не работали так, как рекламировались в XmlSpy