我的源数据如下所示:
<Nodes>
<Node id="abc">
<Data id="123">
<Value>Red</Value>
<Value>Green</Value>
</Data>
<Data id="234">
<Value>North</Value>
<Value>South</Value>
</Data>
</Node>
<Node id="xyz">
<Data id="123">
<Value>Red</Value>
</Data>
<Data id="234">
<Value>North</Value>
<Value>South</Value>
</Data>
</Node>
</Nodes>
我需要在两个数据之间获得所有值的排列&#34; id&#34; s。所以我的输出看起来像这样:
<Nodes>
<Node>
<Value>abc</Value>
<Value123>Red</Value123>
<Value234>North</Value234>
</Node>
<Node>
<Value>abc</Value>
<Value123>Red</Value123>
<Value234>South</Value234>
</Node>
<Node>
<Value>abc</Value>
<Value123>Green</Value123>
<Value234>North</Value234>
</Node>
<Node>
<Value>abc</Value>
<Value123>Green</Value123>
<Value234>South</Value234>
</Node>
<Node>
<Value>xyz</Value>
<Value123>Red</Value123>
<Value234>North</Value234>
</Node>
<Node>
<Value>xyz</Value>
<Value123>Red</Value123>
<Value234>South</Value234>
</Node>
</Nodes>
我只能使用XSL 1.0。我显然可以使用&#34; for-each&#34;在&#34; 123&#34;或者&#34; 234&#34;数据节点,但我无法弄清楚如何退出然后获得另一个的排列。
答案 0 :(得分:1)
看看这是否适合您:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Nodes">
<nodes>
<xsl:apply-templates select="Node"/>
</nodes>
</xsl:template>
<xsl:template match="Node">
<xsl:variable name="node-id" select="@id" />
<xsl:for-each select="Data/Value">
<xsl:variable name="current-value" select="." />
<xsl:variable name="current-id" select="../@id" />
<xsl:for-each select="../following-sibling::Data/Value">
<node>
<value><xsl:value-of select="$node-id"/></value>
<value id="{$current-id}"><xsl:value-of select="$current-value"/></value>
<value id="{../@id}"><xsl:value-of select="."/></value>
</node>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
应用于您的输入示例,结果为:
<?xml version="1.0" encoding="UTF-8"?>
<nodes>
<node>
<value>abc</value>
<value id="123">Red</value>
<value id="234">North</value>
</node>
<node>
<value>abc</value>
<value id="123">Red</value>
<value id="234">South</value>
</node>
<node>
<value>abc</value>
<value id="123">Green</value>
<value id="234">North</value>
</node>
<node>
<value>abc</value>
<value id="123">Green</value>
<value id="234">South</value>
</node>
<node>
<value>xyz</value>
<value id="123">Red</value>
<value id="234">North</value>
</node>
<node>
<value>xyz</value>
<value id="123">Red</value>
<value id="234">South</value>
</node>
</nodes>
注意:
恕我直言,存储数据(原始父id
的{{1}}值
元素名称中的节点不是好习惯。
未经测试,因为您没有提供其他配置。
如果我没弄错的话,这些是组合,而不是排列。