有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将多个XML标记重命名为不同的名称

我正在寻找转换为其他格式的标签,但它是只转换父标签,而不是子标签。 我想在不改变结构的情况下变换标记

例如:

<section name="ABC">
    <section name="123">
        <p>Data</p>
        <p>Data</p>
        <p>Data</p>
    </section>
    <section name="456">
        <table>
            <tr>
                <td><p>Data</p></td>
                <td><p>Data</p></td>
                <td><p>Data</p></td>
            </tr>
        </table>
    </section>
    <section name="232">
      <bold><p>Data</p></bold>
    </section>
</section>

<div class="ABC">
    <div class="123">
        <h1>Data</h1>
        <h1>Data</h1>
        <h1>Data</h1>
    </div>
    <div class="456">
        <table>
            <tr>
                    <td><h1>Data</h1></td>
                    <td><h1>Data</h1></td>
                    <td><h1>Data</h1></td>
            </tr>
        </table>
    </div>
    <div class="232">
        <bold><h1>Data</h1></bold>
    </div>
</div>

这就是我在XSLT转换中所写的内容

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:strip-space elements="*"/>
        <xsl:template match="section"><div><xsl:apply-templates select="node()"/></div></xsl:template>
        <xsl:template match="p"><p><xsl:apply-templates select="node()"/></p></xsl:template>
        <xsl:template match="table"><table><xsl:apply-templates select="node()"/></table></xsl:template>
        <xsl:template match="row"><tr><xsl:apply-templates select="node()"/></tr></xsl:template>
        <xsl:template match="cell"><td><xsl:apply-templates select="node()"/></td></xsl:template>
        <xsl:template match="image"><img><xsl:apply-templates select="node()"/></img></xsl:template>
        
        <xsl:template match="/">
              <html>
              <body>
              <xsl:apply-templates/>
              </body>
              </html>
        </xsl:template>
</xsl:stylesheet>

每件事都很好,但所有属性都在计时,我只得到标记,但没有属性值。我希望应用所有要保留的属性,并单独更改特定属性的名称


共 (1) 个答案

  1. # 1 楼答案

    这应该可以做到:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:strip-space elements="*"/>
        <xsl:template match="section"><div><xsl:apply-templates select="@*|node()"/></div></xsl:template>
        <xsl:template match="p"><h1><xsl:apply-templates select="@*|node()"/></h1></xsl:template>
        <xsl:template match="table"><table><xsl:apply-templates select="@*|node()"/></table></xsl:template>
        <xsl:template match="row"><tr><xsl:apply-templates select="@*|node()"/></tr></xsl:template>
        <xsl:template match="cell"><td><xsl:apply-templates select="@*|node()"/></td></xsl:template>
        <xsl:template match="image"><img><xsl:apply-templates select="@*|node()"/></img></xsl:template>
        <xsl:template match="@name"><xsl:attribute name="class"><xsl:value-of select="."/></xsl:attribute></xsl:template>
        <!  identity transformation  >
        <xsl:template match="@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
        <xsl:template match="/">
            <html>
                <body>
                    <xsl:apply-templates/>
                </body>
            </html>
        </xsl:template>
    </xsl:stylesheet>