代码之家  ›  专栏  ›  技术社区  ›  Adam

如何通过javax.xml.transform文件.变压器.变换()呼叫?

  •  0
  • Adam  · 技术社区  · 14 年前

    我在用javax.xml.transform文件.变压器.变换()通过xsl样式表将一个xml转换为另一个xml。我想按程序设置一级儿童的分类,但不确定如何进行。我已经查过了 docs ,但我不明白要使用哪种类型的属性/参数,以及如何在排序中指定:

    <xsl:sort select="*need to get property or parameter to here*"/>

    编辑: xsl:for-each

    2 回复  |  直到 14 年前
        1
  •  1
  •   user357812 user357812    14 年前

    此样式表:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:param name="pSortingBy" select="/root/@sorting"/>
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:template>
        <xsl:template match="/root">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*">
                    <xsl:sort select="*[name()=$pSortingBy]"/>
                </xsl:apply-templates>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
    

    使用此输入:

    <root sorting="prop4">
        <elem1>
            <prop1>A</prop1>
            <prop2>B</prop2>
            <prop3>C</prop3>
            <prop4>D</prop4>
            <prop5>A</prop5>
        </elem1>
        <elem2>
            <prop1>B</prop1>
            <prop2>C</prop2>
            <prop3>D</prop3>
            <prop4>A</prop4>
            <prop5>B</prop5>
        </elem2>
        <elem3>
            <prop1>C</prop1>
            <prop2>D</prop2>
            <prop3>A</prop3>
            <prop4>B</prop4>
            <prop5>C</prop5>
        </elem3>
    </root>
    

    输出:

    <root sorting="prop4">
        <elem2>
            <prop1>B</prop1>
            <prop2>C</prop2>
            <prop3>D</prop3>
            <prop4>A</prop4>
            <prop5>B</prop5>
        </elem2>
        <elem3>
            <prop1>C</prop1>
            <prop2>D</prop2>
            <prop3>A</prop3>
            <prop4>B</prop4>
            <prop5>C</prop5>
        </elem3>
        <elem1>
            <prop1>A</prop1>
            <prop2>B</prop2>
            <prop3>C</prop3>
            <prop4>D</prop4>
            <prop5>A</prop5>
        </elem1>
    </root>
    

    注意 pSortingBy

    编辑 :我不是java专家,但我认为您可以:

    javax.xml.transform.TransformerFactory transFact =
                           javax.xml.transform.TransformerFactory.newInstance( );
    javax.xml.transform.Transformer trans = transFact.newTransformer(xsltSource);
    trans.setParameter("pSortingBy", "prop5");
    
        2
  •  0
  •   Thorbjørn Ravn Andersen    14 年前

    http://www.w3schools.com/xsl/el_sort.asp :

     <xsl:for-each select="catalog/cd">
          <xsl:sort select="artist"/>
          <tr>
            <td><xsl:value-of select="title"/></td>
            <td><xsl:value-of select="artist"/></td>
          </tr>
        </xsl:for-each>