2013-05-28 68 views
0

我有一个如下所示的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> 

的第一对节点它没有返回这是很好的,但对于第2个一个它返回第1条第2款,其中,因为它应该只返回段的任何文字1.任何帮助或暗示如何实现这一目标?

+0

我修正了缩进以正确显示嵌套。这仍然是你的意图吗?如果这是整个XSL,那么第二个''就不会被看到,因为当模板与外部''匹配时,它被“消耗掉”,除非在其他位置有'apply-templates'。事实上,你看到的输出是来自匹配***第一***''。请发布足够的XSLT,以便我们看到正在发生的事情。如果没有这个问题,这个问题是不能回答的。 –

回答

0

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

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

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

但是你需要在模板中写一个apply-templates使内部元件将被处理。

相关问题