xslt可展平任何xml文件

xslt可展平任何xml文件,xml,xslt,transform,Xml,Xslt,Transform,以以下XML为例: <?xml version="1.0" encoding="UTF-8"?> <Message> <MessageID>1</MessageID> <MessageType>0</MessageType> <UniqueRef>12</UniqueRef> <CreatedBy>fooo.bar</CreatedBy> <Product>

以以下XML为例:

<?xml version="1.0" encoding="UTF-8"?>
<Message>
<MessageID>1</MessageID>
<MessageType>0</MessageType>
<UniqueRef>12</UniqueRef>
<CreatedBy>fooo.bar</CreatedBy>
<Product>
    <Name>Food Mixer</Name>
    <Origin>London</Origin>
    <CreatedBy>foo.bar</CreatedBy>
</Product>
<ProductExtendedProperties>
    <CreateDate>23/10/2010</CreateDate>
    <CreatedBy>foo.bar</CreatedBy>
</ProductExtendedProperties>
<Items>
    <Item>
        <Title>Food Mixer</Title>
        <CreatedBy>my.customer</CreatedBy>
    </Item>
</Items>

1.
0
12
富奥酒吧
食品搅拌机
伦敦
美食酒吧
23/10/2010
美食酒吧
食品搅拌机
我的顾客

是否有可能创建一个xslt,它是通用的,因为它将接受抛出的任何元素,不管是否嵌套,并提供格式良好的html

大概是这样的:

<html>
<body>
    <fieldset>
        <legend>Message</legend>
        <div>
            <p>MessageID: 1</p>
            <p>MessageType: 0</p>
            <p>UniqueRef: 0</p>
            <p>CreatedBy: foo.bar</p>

            <div>
                <p>Product:</p>
                <ul>
                    <li>Name: Food Mixer</li>
                    <li>Origin: London</li>
                    <li>CreatedBy: foo.bar</li>
                </ul>
            </div>
            <div>
                <p>ProductExtendedProperties:</p>
                <ul>
                    <li>CreateDate: 23/10/2010</li>
                    <li>CreatedBy: foo.bar</li>
                </ul>
            </div>
            <div>
                <p>
                    Items
                </p>
                <div>
                    <p>Item 1:</p>
                    <ul>
                        <li>Title: Food Mixer</li>
                        <li>CreatedBy: my.customer</li>
                    </ul>
                </div>


            </div>
        </div>
    </fieldset>
</body>

消息
MessageID:1

消息类型:0

UniqueRef:0

CreatedBy:foo.bar

产品:

  • 名称:食品搅拌机
  • 产地:伦敦
  • CreatedBy:foo.bar
ProductExtendedProperties:

  • 创建日期:23/10/2010
  • CreatedBy:foo.bar
项目

项目1:

  • 标题:食物搅拌机
  • CreatedBy:my.customer

它不必如此复杂,只需将元素的所有名称和值格式化为嵌套列表元素即可

我不知道从哪里开始使用xslt


非常感谢任何帮助

我认为,如果你开始尝试解决你需要的问题,然后具体说明你需要从哪里获得帮助,人们会更能帮助你

例如,您可以从一个将模板应用于
“*”
(任何子元素)的模板开始,另一个模板与
“*”
匹配,并使用
local-name()
输出当前元素的名称(以及所需的标记)。

单向:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*"/>
    <xsl:output method="xml"/>
    <xsl:template match="/*" priority="1">
        <html>
            <body>
                <fieldset>
                    <legend>
                        <xsl:value-of select="name()"/>
                    </legend>
                    <div>
                        <xsl:apply-templates/>
                    </div>
                </fieldset>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="/*/*[not(*)]" priority="1">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>
    <xsl:template match="*[*]">
        <div>
            <p>
                <xsl:value-of select="concat(name(),':')"/>
            </p>
            <xsl:apply-templates/>
        </div>
    </xsl:template>
    <xsl:template match="*[not(*)][position()!=1]"/>
    <xsl:template match="*[not(*)][1]">
        <ul>
            <xsl:apply-templates select="../*" mode="makeLi"/>
        </ul>
    </xsl:template>
    <xsl:template match="*" mode="makeLi">
        <li>
            <xsl:apply-templates/>
        </li>
    </xsl:template>
    <xsl:template match="text()">
        <xsl:value-of select="concat(name(..),': ',.)"/>
    </xsl:template>
</xsl:stylesheet>


  • 输出:

    <html>
        <body>
            <fieldset>
                <legend>Message</legend>
                <div>
                    <p>MessageID: 1</p>
                    <p>MessageType: 0</p>
                    <p>UniqueRef: 12</p>
                    <p>CreatedBy: fooo.bar</p>
                    <div>
                        <p>Product:</p>
                        <ul>
                            <li>Name: Food Mixer</li>
                            <li>Origin: London</li>
                            <li>CreatedBy: foo.bar</li>
                        </ul>
                    </div>
                    <div>
                        <p>ProductExtendedProperties:</p>
                        <ul>
                            <li>CreateDate: 23/10/2010</li>
                            <li>CreatedBy: foo.bar</li>
                        </ul>
                    </div>
                    <div>
                        <p>Items:</p>
                        <div>
                            <p>Item:</p>
                            <ul>
                                <li>Title: Food Mixer</li>
                                <li>CreatedBy: my.customer</li>
                            </ul>
                        </div>
                    </div>
                </div>
            </fieldset>
        </body>
    </html>
    
    
    消息
    MessageID:1

    消息类型:0

    UniqueRef:12

    CreatedBy:fooo.bar

    产品:

    • 名称:食品搅拌机
    • 产地:伦敦
    • CreatedBy:foo.bar
    ProductExtendedProperties:

    • 创建日期:23/10/2010
    • CreatedBy:foo.bar
    项目:

    项目:

    • 标题:食物搅拌机
    • CreatedBy:my.customer

    听起来像是一个评论,而不是一个答案。@ceving:这是一个评论。但是OP说“我不知道从哪里开始使用xslt……非常感谢任何帮助”。我建议了一个起点(以及在这个问题上取得进展的方法)。当时,OP没有答案。我认为这是一个合格的答案。