XPath过滤器不是空的子元素

时间:2010-04-19 19:41:38

标签: 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的项目。

谢谢!

2 个答案:

答案 0 :(得分:8)

由于FileName是子元素而不是属性,因此您需要按原样访问它,而不是在节点名称前面使用属性限定符@

尝试:

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

这将选择具有DocumentElement/QueryResults子元素的FileName元素。

但是,如果您总是有一个FileName子元素(有时为空)并且您想要选择非空元素,请尝试以下操作:

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

答案 1 :(得分:3)

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

这只是一个快速的猜测,我很长时间没有使用过XPath / XSLT。不过,如果它是空的,那么应该跳过它。虽然我更喜欢使用像string-length这样的函数,但并非所有的UAs都支持它们(特别是客户端XSLT解析器根本不能使用XPath和XSLT 1.0,更不用说XSLT 2.0和XPath提供的有用功能和功能)