XQuery |如何将所有属性转换为元素

时间:2018-07-31 09:05:15

标签: xml xslt recursion xquery

我需要准备一个XQuery文件,对于任何输入XML文件,该文件都会将所有属性转换为元素。我在下面的XSLT中完成了它。 tranformation.xsl

<xsl:template match="*" name="xsl:initial-template">
    <xsl:element name="{name()}">
        <xsl:for-each select="@*">
            <xsl:element name="{name()}">
                <xsl:value-of select="."/>
            </xsl:element>
        </xsl:for-each>

        <xsl:apply-templates select="child::node()"/>

    </xsl:element>
</xsl:template>

1 个答案:

答案 0 :(得分:4)

在XQuery 3.1中,您可以使用

declare function local:apply($nodes as node()*) as node()* {
    $nodes ! (
        typeswitch(.) 
            case document-node() 
              return local:apply(node())
            case element() 
              return element {node-name()} {
                                              @* ! element{node-name()} { data() }, 
                                              local:apply(node()) 
                                           }
            default return .
    )
};

local:apply(/)

https://xqueryfiddle.liberty-development.net/bFukv8c/3上的在线示例