Xml XSLT输出应该已经处理的节点的文本
我的XSLT文件有一个问题,它采用的XML文件格式大致如下:Xml XSLT输出应该已经处理的节点的文本,xml,xslt,Xml,Xslt,我的XSLT文件有一个问题,它采用的XML文件格式大致如下: <model> <interface> <doc>text1</doc> <acc> <op name="name"> <in> <doc>text2</doc>
<model>
<interface>
<doc>text1</doc>
<acc>
<op name="name">
<in>
<doc>text2</doc>
<parameter name="name" type="type">
<doc>text3</doc>
</parameter>
</in>
<out>
<doc>text4</doc>
<parameter name="name" type="type">
<doc>text5</doc>
</parameter>
</out>
<exception name="name">
<doc>text6</doc>
<parameter name="name" type="type">
<doc>text7</doc>
</parameter>
<parameter name="name" type="type">
<doc>text8</doc>
</parameter>
</exception>
</op>
</acc>
<conn>
<op name="name">
<in>
<doc>text9</doc>
<parameter name="name" type="type">
<doc>text10</doc>
</parameter>
</in>
</op>
</conn>
<!-- rest omitted !-->
</interface>
</model>
为什么会发生这种情况?我知道这是由于默认模板造成的,但在我看来,我并没有在任何地方匹配这些标记。如果我这样做了,我在底部添加了最终模板,匹配model/interface/acc/op/in/parameter/doc
,只是为了捕捉这样的匹配,但它没有任何帮助
我还尝试覆盖导致此行为的默认模板,例如:
<xsl:template match="text()" />
及
然而,这两者都没有区别。我在这里不知所措
另外,请随意评论我的XSLT风格。我只是在学习它,我很好奇我是否遵循惯用XSLT。显然,您正在将模板应用于包含要输出的文本节点的节点,但您没有与之匹配的相应模板。在这种情况下,将启动-它们的操作是输出所有子体文本值 我还尝试覆盖导致错误的默认模板 这种行为,例如:
<xsl:template match="text()" />
如果这不起作用,那么很明显,这些模板是以不同的模式应用的。事实上
<xsl:template match="text()" mode="toc"/>
将抑制不需要的文本。显然,您正在将模板应用于包含要输出的文本节点的节点,但没有与之匹配的相应模板。在这种情况下,将启动-它们的操作是输出所有子体文本值 我还尝试覆盖导致错误的默认模板 这种行为,例如:
<xsl:template match="text()" />
如果这不起作用,那么很明显,这些模板是以不同的模式应用的。事实上
<xsl:template match="text()" mode="toc"/>
将抑制不需要的文本。您有
,但该模式的唯一模板是toc
<xsl:template match="acc/op/in" mode="toc">
<tr>
<td><a href="#{../@name}"><xsl:value-of select="../@name"/>foo</a></td>
</tr>
</xsl:template>
如果您只想处理该模式的acc/op/in
元素以输出表行,那么不要处理其他元素,因此最简单的解决方法似乎是使用
您有
,但该模式的唯一模板是toc
<xsl:template match="acc/op/in" mode="toc">
<tr>
<td><a href="#{../@name}"><xsl:value-of select="../@name"/>foo</a></td>
</tr>
</xsl:template>
如果您只想处理该模式下的
acc/op/in
元素以输出表行,则不处理其他元素,因此最简单的修复方法似乎是使用
啊,是的,我明白了。但是,接受另一个答案,因为这似乎是一个更好的主意。只是澄清一下,想法是一样的:更有选择地应用你的模板。我只是解释了为什么你的想法不起作用。啊,是的,我明白了。但是,接受另一个答案,因为这似乎是一个更好的主意。只是澄清一下,想法是一样的:更有选择地应用你的模板。我只是解释了为什么你的想法不起作用。