以下是我的示例XML:
<index>
<indextext>
<index.text1>Here goes some text<link attribute1="this" attribute2="that">and here is a link</link></index.text1>
</indextext>
</index>
现在我的问题是我需要分隔index.text1
节点和link
节点的文本。
这就是事情。我尝试通过获取preceding-sibling
节点的link
来做到这一点,我能够实际执行此操作,但由于某种原因我丢失了链接属性 - 换句话说,该链接包含属性使其能够链接到不同的文档,在这种情况下丢失。注意:一旦我弄乱了<template match="link">
,我就失去了这些属性。
我做的是:
<xsl:template match="index.text1//link">
<xsl:text><![CDATA[ ]]></xsl:text>
<xsl:apply-templates/>
</xsl:template>
......但这不起作用,如上段所述。
我的问题是如何以某种方式选择link
节点之前的文本,或者如何选择link
节点本身并在其之前输入空格,但保留所有属性?< / p>
奖金问题 - 有没有办法让我自动选择一系列以名称index.text
开头的不同节点?例如,有没有办法可以自动选择index.text
,index.text1
,index.text2
等? index.text*
会有效吗?
已解决 - 我弄清楚问题是什么。基本上我需要调用实际处理文档链接的“主”代码中的另一个模板。还有更多的代码可以让自己熟悉!
答案 0 :(得分:1)
如果您知道所有这些链接元素前面都有空格,那么只需执行
即可 <xsl:template match="index.text1//link">
<xsl:text> </xsl:text>
<xsl:call-template name="identity"/>
</xsl:template>
与
<xsl:template match="@* | node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
对于外卡元素匹配,请使用
<xsl:template match="*[starts-with(local-name(), 'index.text')]//link">
<xsl:text> </xsl:text>
<xsl:call-template name="identity"/>
</xsl:template>