1

我有一个像下面这样的 xml,我想做的是使用匹配模板获取父元素的文本节点。

<xml>
  <para>
    <text>
        para 1
    </text>
    <para>
      <text>
        para 2
      </text>     
    </para>
  </para>
</xml>

我的 xslt 如下所示

<xsl:template match="para">
          <xsl:value-of select="../para/text/text()"/>
</xsl:template> 

对于第一个 para 节点,它没有返回任何好的文本,但对于第二个节点,它返回 para 1 para 2,因为它应该只返回 para 1。任何帮助或提示如何实现这一点?

4

1 回答 1

1

在您的 XML 中,第二个元素的父para元素是第一个para元素。这意味着,如果第二个para是您的上下文节点,那么../para/text/text()将向上到父级(第一个para)向下到所有para子级(只有一个 -para再次是第二个),然后选择该text子级中的文本,即para 2.

如果你想要父para元素的第一个文本节点,那么你应该写

select="parent::para/text[1]"

但是,您需要apply-templates在模板中编写一个,以便处理内部元素。

于 2013-05-29T01:06:52.157 回答