为什么我要使用这些数据:
<A>
<B>block 1</B>
<B>block 2</B>
<C>
no
</C>
<B>block 3</B>
</A>
和这个转变:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method= "html" indent="yes"/>
<xsl:template match="A/B">
<xsl:value-of select="."/> <br/>
</xsl:template>
</xsl:stylesheet>
以下输出:
block 1
block 2
no block 3
我希望它是:
block 1
block 2
block 3
那么:为什么C块被包括在内?
// EDIT 测试了这里的东西: http://www.ladimolnar.com/JavaScriptTools/XSLTransform.aspx
答案 0 :(得分:1)
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()|@*">
<xsl:value-of select="."/>
</xsl:template>
XSL处理器依次检查每个节点,寻找匹配的模板。如果找不到,则使用默认模板,该模板仅输出文本。在您的情况下,会发生以下情况(“不匹配”表示您的样式表中没有匹配项):
/A no match, apply-templates (default element template)
/A/B match, output text
/A/B match, output text
/A/C no match, apply-templates
/A/C/text no match, output text (default text template)
/A/B match, output text
要跳过路径/A/C
,只需添加空模板
<xsl:template match="A/C"/>
这将匹配不需要的元素并抑制输出。