0

我必须显示一个层次结构,我的输入来自 XML 中的 Web 服务,如下所示:

<Nodes>
    <Node>
        <Data>
            <Attribute name="ID">Desktop</Attribute>
            <Attribute name="Parent">administrator</Attribute>
        </Data>
        <Relationship>
            <RelatedNodes>
                <Node>
                    <Data>
                        <Attribute name="ID">administrator</Attribute>>
                        <Attribute name="Parent">Users</Attribute>
                    </Data>
                    <Relationship>
                        <RelatedNodes>
                            <Node>
                                <Data>
                                    <Attribute name="ID">Users</Attribute>
                                    <Attribute name="Parent">C</Attribute>
                                </Data>
                                <Relationship>
                                    <RelatedNodes>
                                        <Node>
                                            <Data>
                                                <Attribute name="ID">C</Attribute>
                                                <Attribute name="Parent"/>
                                            </Data>
                                        </Node>
                                    </RelatedNodes>
                                </Relationship>
                            </Node>
                        </RelatedNodes>
                    </Relationship>
                </Node>
            </RelatedNodes>
        </Relationship>
    </Node>
</Nodes>

为了显示它,UI 人员要求我转换为这样的 JSON:

{
    children:[{
            "title": "C",
            "level": "1",
            "children": [
                {
                    "title": "Users",
                    "level": "2",
                    "children": [
                        {
                            "title": "administrator",
                            "level": "3",
                        }, 
                        "children": [
                            {
                                "title": "Desktop",
                                "level": "4",
                            },
                        ]
                    ]
                }
            ]
    }]
}

关于如何使用 XSLT 或任何其他转换工具执行此操作的任何想法?

谢谢!

4

1 回答 1

0

这里有一个小样式表,可以让您了解如何处理这个问题:

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
    <xsl:output method='text'  encoding="UTF-8"/>

    <xsl:template match="/">
        {
        <xsl:apply-templates select="//Data[Attribute/@name ='Parent' and Attribute = '' ]/parent::Node" />
        }
    </xsl:template>

    <xsl:template match="Node" >
        <xsl:param name="level" select="1" />
        children:[
        {
        "title": "<xsl:value-of select="Data/Attribute[@name = 'ID']" />",
           "level": "<xsl:value-of select="$level"/>,
           <xsl:apply-templates select="ancestor::Node[1]">
               <xsl:with-param name="level" select="$level+1" />
           </xsl:apply-templates>
        }
        ]

    </xsl:template>
</xsl:stylesheet> 

它从具有名称为“Parent”但没有值的属性的节点开始。

顺便说一句,您的 xml 结构很奇怪,如果结构更复杂(同一级别上有更多节点),我不知道这应该如何工作。

于 2013-06-24T19:01:32.287 回答