Фильтр XPath не пустой дочерний элемент

Я должен отфильтровать выражение XPath для захвата только определенного атрибута как не пустой.

Я попробовал это:

<xsl:template match="DocumentElement/QueryResults[string(@FileName)]">

и это:

<xsl:template match="DocumentElement/QueryResults[string-length(@FileName)>0]">

но это не работало. Мне нужен тот же вид данных, возвращающихся из нумерующего страницы выражения XPath...

<xsl:template match="DocumentElement/QueryResults">

... но фильтрованный для предотвращения объектов с пустым атрибутом @FileName.

Спасибо!

6
задан martieva 14 May 2015 в 14:36
поделиться

2 ответа

Поскольку FileName является дочерним элементом, а не атрибутом, вам необходимо получить доступ как таковой, и не используйте квалификатор атрибута @ перед именем узла.

Попробуйте:

<xsl:template match="DocumentElement/QueryResults[FileName]">

Это выберет элементы DocumentElement / QueryResults , у которых есть дочерний элемент FileName .

Если, однако, у вас всегда есть дочерний элемент FileName (иногда пустой) и вы хотите выбрать непустые, попробуйте следующее:

<xsl:template match="DocumentElement/QueryResults[string-length(FileName) &gt; 0]">
8
ответ дан 9 December 2019 в 22:31
поделиться
<xsl:template match="DocumentElement/QueryResults[FileName != '']">

Это всего лишь предположение, и я давно не работал с XPath / XSLT. Тем не менее, если он пуст, то его следует пропустить. Хотя я предпочитаю использовать такие функции, как string-length , не все UA их поддерживают (особенно клиентские парсеры XSLT, которые вообще почти не работают с XPath и XSLT 1.0, не говоря уже о полезных функциях и функциональных возможностях XSLT 2.0. и XPath предоставляют).

3
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: