XSL 2.0 合并/分组具有相同子值的两个不同节点元素



我是 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 的解决方案是相同的。

相关内容

  • 没有找到相关文章

最新更新