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

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

Я попытался это:

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

и так:

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

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

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

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

спасибо!

2 ответов


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

попробуй:

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

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

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

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

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

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