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