Фильтр XPath не пустой дочерний элемент - PullRequest
6 голосов
/ 19 апреля 2010

Мне нужно отфильтровать выражение XPath, чтобы получить только определенный атрибут как не пустой.

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

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

и это:

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

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

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

... но отфильтровано, чтобы избежать элементов с пустым атрибутом @ FileName.

Спасибо!

Ответы [ 2 ]

8 голосов
/ 19 апреля 2010

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

Попытка:

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

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

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

<xsl:template match="DocumentElement/QueryResults[string-length(FileName) &gt; 0]">
3 голосов
/ 20 апреля 2010
<xsl:template match="DocumentElement/QueryResults[FileName != '']">

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...