我是 XSLT 1.0 的新手,我试图将两个具有相同值的不同元素合并/分组到一个表中。
XML 输入
<transaction>
<request_id> 1 </request_id>
<message> Hi </message>
</transaction>
<transaction>
<response_id> 1 </response_id>
<message> Hola </message>
</transaction>
<transaction>
<request_id> 2 </request_id>
<message> bye </message>
</transaction>
<transaction>
<response_id> 2 </response_id>
<message> bye bye </message>
</transaction>
我想有下表
<table>
<thead>
<th> ID </th>
<th> request </th>
<th> response </th>
</thead>
<tbody>
<tr>
<td> 1 </td>
<td> Hi </td>
<td> Hola </td>
</tr>
<tr>
<td> 2 </td>
<td> bye </td>
<td> bye bye </td>
</tr>
</tbody>
</table>
我在这里找到了如何按值合并元素的解决方案,但它始终具有相同的元素名称,有什么建议吗?
给定格式正确的输入:
<root>
<transaction>
<request_id> 1 </request_id>
<message> Hi </message>
</transaction>
<transaction>
<response_id> 1 </response_id>
<message> Hola </message>
</transaction>
<transaction>
<request_id> 2 </request_id>
<message> bye </message>
</transaction>
<transaction>
<response_id> 2 </response_id>
<message> bye bye </message>
</transaction>
</root>
以下样式表:
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:key name="response" match="transaction" use="response_id" />
<xsl:template match="/">
<table>
<thead>
<th>ID</th>
<th>Request</th>
<th>Response</th>
</thead>
<tbody>
<xsl:for-each select="root/transaction[request_id]">
<tr>
<td><xsl:value-of select="request_id"/></td>
<td><xsl:value-of select="message"/></td>
<td><xsl:value-of select="key('response', request_id)/message"/></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>
将返回请求的结果。
这假设每个唯一 id 都有一对事务(请求和响应)。
在这种情况下,XSLT 1.0 或 2.0 的解决方案是相同的。