0

这是我的示例 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-siblinglink做到这一点,并且我能够真正做到,但是由于某种原因我失去了链接属性 - 换句话说,该链接包含使其能够链接到不同文档的属性,这在这种情况下丢失了。注意:一旦我弄乱了<template match="link">,我就会失去这些属性。

我所做的是这样的:

  <xsl:template match="index.text1//link">
    <xsl:text><![CDATA[  ]]></xsl:text>
    <xsl:apply-templates/>    
  </xsl:template>

...但这不起作用,如上段所述。

我的问题是如何以某种方式选择link节点之前的文本,或者如何选择link节点本身并在它之前输入空格,但保留所有属性?

奖金问题- 有没有办法让我自动选择一堆以名称开头的不同节点index.text?例如,有没有一种方法可以自动选择index.text,index.text1index.text2?会index.text*工作吗?

已解决-我弄清楚了问题所在。基本上我需要调用另一个模板,它位于实际处理呈现文档链接的“主”代码中。还有更多代码需要熟悉!

4

1 回答 1

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>
于 2013-10-31T18:43:19.887 回答