获取每个特定子节点的父节点值

时间:2020-05-14 13:18:04

标签: xslt xslt-1.0

我想返回如下矩阵:

  • key1-> Val1
  • Key1-> Val2
  • key2-> Val1
  • key2-> Val2
  • key2-> Val3

换句话说,对于每个CC节点,我只想返回以前的AA节点。

能否请您帮助我获取正确的xslt 1.0代码? XML示例:

<parent>
    <AA>Val1</AA>
    <AA>Val2</AA>
    <BB>
         <CC>key1</CC>
    </BB>
    <AA>Val3</AA>
    <BB>
         <CC>key2</CC>
    </BB>
</parent>

1 个答案:

答案 0 :(得分:0)

这是您可以执行此操作的方法:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="1.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="parent/BB/CC"/>
  </xsl:template>

  <xsl:template match="CC">
    <xsl:variable name="currentCC" select="."/>
    <xsl:for-each select="preceding::AA">
      <xsl:value-of select="concat($currentCC,' -&gt; ',.)"/>
      <xsl:text>&#xa;</xsl:text>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

看到它在这里工作:https://xsltfiddle.liberty-development.net/6pS26n1/1

修改 要仅获取最后一个元素,可以使用:

  <xsl:template match="CC">
    <xsl:value-of select="concat(.,' -&gt; ',preceding::AA[1])"/>
    <xsl:text>&#xa;</xsl:text>
  </xsl:template>