仅使用不带扩展名的xslt 1.0。
举个例子:
<forest>
<hunter>fast antelope</hunter>
<hunter>jumping deer</hunter>
<hunter>large elk</hunter>
<hunter> </hunter>
<prey>rabbit</prey>
<prey>eagle</prey>
<prey>deer</prey>
<prey>elk</prey>
<prey></prey>
</forest>
和
<forest>
<hunter>fast antelope</hunter>
<hunter>jumping deer</hunter>
<hunter>large elk</hunter>
<hunter> </hunter>
<prey>rabbit</prey>
<prey>eagle</prey>
<prey>fox</prey>
<prey>goose</prey>
<prey></prey>
</forest>
如何编写<xsl:if>
或<xsl:when>
测试以检查至少有一个<hunter>
包含至少一个<prey>
的文本,但不匹配<hunter>
或<prey>
中的空或仅空白文本节点?
可能有更多节点,因此这必须是纯文本模式,没有位置技巧等。
我的预期结果将是示例一中的匹配(基于鹿,<prey>
中的麋鹿)和示例二中的失败(仅限空白和text()
个节点)。
谢谢!
答案 0 :(得分:1)
怎么样:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/forest">
<xsl:variable name="marker">
<xsl:for-each select="hunter">
<xsl:if test="../prey[normalize-space()][contains(current(), .)]">1</xsl:if>
</xsl:for-each>
</xsl:variable>
<result>
<xsl:choose>
<xsl:when test="string($marker)">
<xsl:text>Match</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>No Match</xsl:text>
</xsl:otherwise>
</xsl:choose>
</result>
</xsl:template>
</xsl:stylesheet>