从Java程序传递的动态标记的XSLT

时间:2014-08-25 13:10:28

标签: java xml xslt xalan jaxp

我的要求是进行XML A到XML B的转换。我从XML A中读取的标签应该是可配置的,它是一种列表的迭代。如果XML A中存在任何新标记,则应通过在Java的配置文件中添加条目并以编程方式处理,这反过来应该反映在XSLT中并转换为XML B.

我正在使用Java。是否可以通过参数传递?根据我的要求,参数将在循环或List中传递。

我是XSLT的新手,对此的任何信息链接都非常感激。

源XML - 这里可以有更多像年度,每周等的

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Report>
    <Daily>
        <input>1234</input>
    </Daily>
    <Monthly>
        <input>8678</input>
    </Monthly>  
</Report>

目标XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Report>
    <Value>
        <Attribute>
            <name>Daily</name>
            <values>1234</values>
        </Attribute>
        <Attribute>
            <name>Monthly</name>
            <values>8678</values>
        </Attribute>
    </Value>
</Report>

1 个答案:

答案 0 :(得分:1)

您可以对当前选定的节点使用name()local-name()功能。

了解如何selecting current element name in XSLT

这是代码草图:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/Report/">
        <Value>
        <xsl:for-each select="*">
            <Attribute>
                <name>
                    <xsl:value-of select="name()"/>
                </name>
                <values>
                    <xsl:value-of select="./input"/>
                </values>
            </Attribute>
        </xsl:for-each>
        </Value>
    </xsl:template>
</xsl:stylesheet>