【问题标题】:how to get first child node value of a parent element如何获取父元素的第一个子节点值
【发布时间】:2013-05-28 20:54:01
【问题描述】:

我有一个像下面这样的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。任何帮助或提示如何实现这一点?

【问题讨论】:

  • 我修复了您的缩进以正确显示嵌套。这还是你想要的吗?如果这是整个 XSL,则根本不会看到第二个 &lt;para&gt;,因为当模板与外部 &lt;para&gt; 匹配时,它会被“消耗”,除非您在其他地方有 apply-templates。事实上,您看到的输出来自匹配 first &lt;para&gt;。请发布足够多的 XSLT,以便我们可以看到真正正在发生什么。没有它,这个问题就无法回答。

标签: xslt


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 2020-09-27
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多