【发布时间】:2017-06-18 06:19:37
【问题描述】:
我需要根据属性值通过 xslt 合并两个复杂元素节点,例如,当 id=1 时,需要合并其各自的名称值元素。以此类推,id=2, 3 ..etc
<?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>
我试过下面的代码,但它没有根据 id 合并。
<?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
但我不明白它们的实现概念。
【问题讨论】:
-
这个例子令人困惑:
<value>1</value>中的1来自哪里?无论如何,这看起来像是一个分组问题,因此了解您是否可以使用 XSLT 2.0 非常重要。 -
这是一个错字 Micheal,没有值 1.. 它只是一个空值。这种分组可以使用版本 2 xslt 来完成吗?
-
它可以在 XSLT 1.0 和 XSLT 2.0 中完成 - 但方法不同。 -- 请更正您的示例并阐明合并具有不同值的两个节点时会发生什么。
-
我不确定如何编辑内容以更正它,我试过了。至于预期的输出,对于每个条目,我需要对每个 keyValue 进行分组,并获得一个具有合并 keyValue 的 id 的唯一条目。
-
不清楚。请举个例子。并说明您的处理器版本。