我需要过滤一个XPath表达式,只抓取某个属性为非空。
我试过了:
<xsl:template match="DocumentElement/QueryResults[string(@FileName)]">
和此:
<xsl:template match="DocumentElement/QueryResults[string-length(@FileName)>0]">
但它不起作用。我需要从下面的XPath表达式返回相同类型的数据...
<xsl:template match="DocumentElement/QueryResults">
...但过滤以避免具有空属性@FileName的项目。
谢谢!
答案 0 :(得分:8)
由于FileName
是子元素而不是属性,因此您需要按原样访问它,而不是在节点名称前面使用属性限定符@
。
尝试:
<xsl:template match="DocumentElement/QueryResults[FileName]">
这将选择具有DocumentElement/QueryResults
子元素的FileName
元素。
但是,如果您总是有一个FileName
子元素(有时为空)并且您想要选择非空元素,请尝试以下操作:
<xsl:template match="DocumentElement/QueryResults[string-length(FileName) > 0]">
答案 1 :(得分:3)
<xsl:template match="DocumentElement/QueryResults[FileName != '']">
这只是一个快速的猜测,我很长时间没有使用过XPath / XSLT。不过,如果它是空的,那么应该跳过它。虽然我更喜欢使用像string-length
这样的函数,但并非所有的UAs都支持它们(特别是客户端XSLT解析器根本不能使用XPath和XSLT 1.0,更不用说XSLT 2.0和XPath提供的有用功能和功能)