使用XSL将XML嵌套数据转换为平面概述表

时间:2012-07-19 13:04:52

标签: xml xslt html-table

我有xml-Data,如:

<rootNode>
    <subNode name="sn1">
        <node name="field2" value="23"/>
        <node name="field4" value="24"/>
    </subNode>
    <subNode name="sn2">
        <node name="field2" value="39"/>
    </subNode>
    <subNode name="sn3">
        <subNode name="f1">
            <node name="field2" value="23"/>
            <node name="field4" value="24"/>
        </subNode>
        <node name="field2" value="23"/>
        <node name="field8" value="24"/>
    </subNode>
</rootNode>

节点的深度是无限的。 sunNode可以在每个子节点内。节点可以只在子节点内。

我想将其转换为如下表:

+-----------+-----+-----+-----+
| Field     | sn1 | sn2 | sn3 |
|-----------+-----+-----+-----+
|field2     |  23 |  39 |  23 |
|-----------+-----+-----+-----+
|field4     |  24 | n/a | n/a |
|-----------+-----+-----+-----+
|field8     | n/a | n/a |  24 |
|-----------+-----+-----+-----+
|f1->field2 | n/a | n/a |  23 |
|-----------+-----+-----+-----+
|f1->field4 | n/a | n/a |  24 +
+-----------+-----+-----+-----+

所以我必须在每个“subNode”中搜索每个可能的“节点”,并为每个“subNode”创建一行。然后,如果有top-SubNode的条目,则显示该值。

使用

<xsl:for-each select="subNode//node()">
    <tr>
        <td><xsl:value-of select="@name"/></td>
    </tr>
</xsl:for-each>

我至少得到了数据中所有元素的列表。但是这个清单并不明显。

我找到了this,但无法将其应用于我的需求。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

XSLT将XML的一种形式的XML转换为另一种形式的XML。它不会将XML转换为您自己显示的格式化显示。为此,你需要使用类似FOP的东西。