获取每个特定子节点的父节点值
Get parent node value for each specific child
我想return一个矩阵如下:
- key1 -> Val1
- Key1 -> Val2
- key2 -> Val1
- key2 -> Val2
- key2 -> Val3
换句话说,对于每个 CC 节点,我只想 return 之前的 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>
您可以通过以下方式执行此操作:
<?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,' -> ',.)"/>
<xsl:text>
</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(.,' -> ',preceding::AA[1])"/>
<xsl:text>
</xsl:text>
</xsl:template>
我想return一个矩阵如下:
- key1 -> Val1
- Key1 -> Val2
- key2 -> Val1
- key2 -> Val2
- key2 -> Val3
换句话说,对于每个 CC 节点,我只想 return 之前的 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>
您可以通过以下方式执行此操作:
<?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,' -> ',.)"/>
<xsl:text>
</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(.,' -> ',preceding::AA[1])"/>
<xsl:text>
</xsl:text>
</xsl:template>