如何通过javax.xml.transform.Transformer.transform()调用指定排序方式?

如何通过javax.xml.transform.Transformer.transform()调用指定排序方式?,java,transform,xslt,Java,Transform,Xslt,我使用javax.xml.transform.Transformer.transform()通过xsl样式表将一个xml转换为另一个xml。我想通过编程设置第一级儿童的排序,但不确定如何进行。我已签出,但不知道要使用哪种类型的属性/参数以及如何在排序中指定: 我对其他想法持开放态度,但不希望将xml结果解析为w3c文档 编辑: 为了澄清这一点,我希望通过Transformer API为每个标记设置一个xsl:for中元素的排序键和方向。它需要进入一个for-each或apply模板,并指定要排

我使用javax.xml.transform.Transformer.transform()通过xsl样式表将一个xml转换为另一个xml。我想通过编程设置第一级儿童的排序,但不确定如何进行。我已签出,但不知道要使用哪种类型的属性/参数以及如何在排序中指定:

我对其他想法持开放态度,但不希望将xml结果解析为w3c文档

编辑:
为了澄清这一点,我希望通过Transformer API为每个标记设置一个xsl:for中元素的排序键和方向。

它需要进入一个for-each或apply模板,并指定要排序的表达式

发件人:


此样式表:

<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>

好的,我理解所有的例子。我的问题是如何设置
中的blah,例如,从javax Transformer API编程设置为title或artist?不清楚您是否只想定义排序表达式(Thorbjørn的回答非常简单)或者您希望将排序键作为参数传递。我希望通过Transformer API将排序键作为参数传递。我之所以提到xsl:sort标记,是因为这是我能找到的唯一排序方法。在您的示例中,有没有办法通过Transformer API设置pSortingBy?在Transformer文档中,我看到了setParamter(),但我不知道如何调用它,以便使用xsl中的
$pSortingBy
获取参数。@Adam:这是另一个涉及特定XSLT处理器功能的问题。这就是Dimitre重新标记您的问题的原因。@Alejandro谢谢,这澄清了setParameter如何和xsd交互。
<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>
javax.xml.transform.TransformerFactory transFact =
                       javax.xml.transform.TransformerFactory.newInstance( );
javax.xml.transform.Transformer trans = transFact.newTransformer(xsltSource);
trans.setParameter("pSortingBy", "prop5");