Фильтр 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) > 0]">
<xsl:template match="DocumentElement/QueryResults[FileName != '']">
Это просто быстрая догадка, и я давно не работал с XPath/XSLT. И все же, если она пуста, это должно пройти мимо нее. Хотя я предпочитаю использовать такие функции, как string-length
, Не все UAs поддерживают их (в частности, Парсеры XSLT на стороне клиента, которые едва работают с XPath и XSLT 1.0 вообще, независимо от полезных функций и функциональности, которые предоставляют XSLT 2.0 и XPath).