0
我需要通过基于属性值的xslt合并两个复杂元素节点,即例如当id = 1时,需要合并其相应的名称值元素。等为ID = 2,3 ...等xml通过xslt合并复杂节点
<?xml version="1.0" encoding="UTF-8"?>
<xrefStore>
<xrefData>
<entityData>
<entry id="1">
<keyValue name="A" value=" "/>
<keyValue name="B" value=" "/>
<keyValue name="C" value=" "/>
</entry>
<entry id="2">
<keyValue name="A" value=" "/>
<keyValue name="B" value=" "/>
<keyValue name="c" value=" "/>
<keyValue name="D" value=" "/>
<keyValue name="E" value=" "/>
</entry>
<entry id="1">
<keyValue name="D" value=" "/>
<keyValue name="E" value=" "/>
</entry>
</xrefStore>
</xrefData>
的最终输出应是如下,
<?xml version="1.0"?>
<root>
<set id="1">
<nameValuePair>
<name>A</name>
<value> </value>
</nameValuePair>
<nameValuePair>
<name>B</name>
<value> </value>
</nameValuePair>
<nameValuePair>
<name>C</name>
<value> </value>
</nameValuePair>
<nameValuePair>
<name>D</name>
<value> </value>
</nameValuePair>
<nameValuePair>
<name>E</name>
<value> </value>
</nameValuePair>
</set>
<set id="2">
<nameValuePair>
<name>A</name>
<value> </value>
</nameValuePair>
<nameValuePair>
<name>B</name>
<value> </value>
</nameValuePair>
<nameValuePair>
<name>C</name>
<value> </value>
</nameValuePair>
<nameValuePair>
<name>D</name>
<value> </value>
</nameValuePair>
<nameValuePair>
<name>E</name>
<value> </value>
</nameValuePair>
</set>
</root>
我已经尝试下面的代码,但它不基于合并在身份证上。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<root>
<xsl:for-each select="xrefStore/xrefData/entityData/entity/entry">
<set >
<xsl:attribute name="id">
<xsl:value-of select="current()/@id" />
</xsl:attribute>
<xsl:for-each select="current()/keyValue">
<nameValuePair>
<name>
<xsl:value-of select="current()/@name" />
</name>
<value>
<xsl:value-of select="current()/@value" />
</value>
</nameValuePair>
</xsl:for-each>
</set>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
任何形式的帮助表示赞赏。
我发现了相似的答案在这里, Merge XML nodes using XSLT
,但我不明白他们执行的概念。
的例子是混乱:哪里的'1'在''来自?无论如何,这看起来像是一个分组问题,所以知道您是否可以使用XSLT 2.0至关重要。 –
它是一个错字Micheal,没有价值1 ..它只是一个空值。这个分组可以使用版本2 xslt完成吗? –
它可以在XSLT 1.0和XSLT 2.0中完成 - 但方法不同。 - 请更正您的示例并澄清合并具有不同值的两个节点时应该发生的情况。 –