java - 如何通过 javax.xml.transform.Transformer.transform() 调用指定 sortBy?

标签 java transform xslt

我正在使用 javax.xml.transform.Transformer.transform() 通过 xsl 样式表将一个 xml 转换为另一个 xml。我想以编程方式设置第一级 child 的排序,但我不确定如何进行。我查看了docs ,但我不明白要使用哪种类型的属性/参数以及如何在排序中指定:

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

我愿意接受其他想法,但不想将 xml 结果解析为 w3c 文档。

编辑: 为了澄清,我希望为 xsl:for-each 中的元素设置排序键和方向。通过 Transformer API 进行标记。

最佳答案

这个样式表:

<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 参数定义为遵循 XSLT 处理器规范的任何元素名称。

编辑:我不是java专家,但我认为你可以这样做:

javax.xml.transform.TransformerFactory transFact =
                       javax.xml.transform.TransformerFactory.newInstance( );
javax.xml.transform.Transformer trans = transFact.newTransformer(xsltSource);
trans.setParameter("pSortingBy", "prop5");

关于java - 如何通过 javax.xml.transform.Transformer.transform() 调用指定 sortBy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621110/

相关文章:

java - 如何在 Java 中进行方法链接? o.m1().m2().m3().m4()

ISODateTimeFormat.dateTime() 的 javadoc

javascript - HTML - 影响固定元素的主体旋转

java - 如何使用 XSLT 和 Java 而不是 XSLFO 创建 PDF?

xml - XSLT:如何在 "match"属性中表示 OR?

xml - 如何从 XSLT 调用 XSLT?

java - model.addAttribute ("name",值)和 mv.addObject ("name",值)之间的区别?

java - 封装良好的类的TestNG测试类

json - 使用转换函数后处理 AST 以重命名 json 字段名称的奇怪行为

javascript - 变换旋转+IE9/10的问题