0

我想完全复制一些节点,因为它们使用以下模板:

<xsl:template match="example1 | ext-link | example2">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

所以对于以下输入:

<ext-link ext-link-type="uri" xlink:href="http://www.gnuplot.info/">http://www.gnuplot.info/</ext-link>

我会得到完全相同的:

<ext-link ext-link-type="uri" xlink:href="http://www.gnuplot.info/">http://www.gnuplot.info/</ext-link>

然而结果是这样的:

<ext-link>urihttp://www.gnuplot.info/http://www.gnuplot.info/</ext-link>

我正在使用 Java,撒克逊。

请帮助我,我做错了什么?

4

3 回答 3

2

查看 XSLT 身份转换(例如http://en.wikipedia.org/wiki/Identity_transform#Using_XSLT)添加@*到您的模板匹配。
尝试:

<xsl:template match="@* | example1 | ext-link | example2">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
于 2013-07-04T09:03:14.670 回答
1

我找到了另一种解决方案,我想知道您的想法。它非常适合我的目的。

<xsl:copy>
   <xsl:copy-of select="@*"/>
   <xsl:apply-templates />
</xsl:copy>
于 2013-07-04T10:30:24.453 回答
1

如果您真的只想按原样复制元素及其内容,另一种选择是使用

<xsl:template match="example1 | ext-link | example2">
   <xsl:copy-of select="." />
</xsl:template>

虽然 hr_117 使用应用模板的推送式答案通常是首选的答案,因为它更易于扩展。

于 2013-07-04T11:44:27.747 回答