【问题标题】:XSLT - dynamic node nameXSLT - 动态节点名
【发布时间】:2019-02-11 04:45:08
【问题描述】:

我想将所有子节点作为属性名称转换为节点。并且属性值应该是节点值。

如何给出动态节点名称?

<xsl:attribute name="shouldBeNodeName">

源 XML

<transaction>
    <transactionId>T001</transactionId>
    <clientId>C001</clientId>
    <contractId>C001</contractId>
    <scriptId>REL</scriptId>
    <price>500.5000</price>
    <tradeDate>2019-02-09 16:00:00</tradeDate>
    <valueDate>2019-02-09 16:00:00</valueDate>
    <quantity>100000</quantity>
</transaction>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/">
        <ROOT>
            <TRANS>
                <xsl:for-each select="node()/*">
                        <xsl:attribute name="shouldBeNodeName">
                            <!-- <xsl:value-of select="name()" /> -->   
                            <xsl:value-of select="." />
                        </xsl:attribute>
                </xsl:for-each>
            </TRANS>
        </ROOT>
    </xsl:template>
</xsl:stylesheet>

【问题讨论】:

    标签: xslt-3.0


    【解决方案1】:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="3.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:template match="/">
        <ROOT>
            <TRANS>
                <xsl:for-each select="node()/*">
                    <xsl:attribute name="{name()}">
                            <xsl:value-of select="." />
                        </xsl:attribute>
                </xsl:for-each>
            </TRANS>
        </ROOT>
    </xsl:template>
    

    【讨论】:

    • 请注意,在 XSLT 2 或 3 中,您可以将 &lt;xsl:attribute select="{name()}"&gt;&lt;xsl:value-of select="."/&gt;&lt;/xsl:attribute&gt; 缩短为 &lt;xsl:attribute name="{name()}" select="."/&gt;
    • 谢谢,但没用,我在哪里可以通过示例了解 xslt 2/3?
    • 我不得不使用与 java 不同的转换器。将 //TransformerFactory factory = TransformerFactory.newInstance(); 替换为 TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl(); 并添加所需的 maven 依赖 谢谢!
    • 至少有几本关于 XSLT 和 XPath 2 的书,其中一本可以在线获取,地址为cranesoftwrights.github.io/books/ptux/index.htm,我相信你最喜欢的书店还有更多。还有altova.com/training/xpath3之类的在线教程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多