Xslt XSL/Saxon排序规则/命令行

Xslt XSL/Saxon排序规则/命令行,xslt,xslt-2.0,collation,saxon,Xslt,Xslt 2.0,Collation,Saxon,我想在基于Saxon的xslt转换中使用排序规则。源文件: <root> <entry name="B" /> <entry name="Aa" /> <entry name="Ä" /> <entry name="Az" /> </root> 我的转变: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/T

我想在基于Saxon的xslt转换中使用排序规则。源文件:

<root>
  <entry name="B" />
  <entry name="Aa" />
  <entry name="Ä" />
  <entry name="Az" />
</root>

我的转变:

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:saxon="http://saxon.sf.net/">
  <xsl:output indent="yes"/>

  <saxon:collation name="german" lang="de-DE"/>

    <xsl:template match="root">
      <root>
        <xsl:for-each select="entry">
          <xsl:sort select="@name" collation="german"/>
          <sorted entry="{@name}"/>
        </xsl:for-each>
      </root>
    </xsl:template>

</xsl:stylesheet>

这在氧气中几乎可以正常工作,输出为:

<root xmlns:saxon="http://saxon.sf.net/">
   <sorted entry="Ä"/>
   <sorted entry="Aa"/>
   <sorted entry="Az"/>
   <sorted entry="B"/>
</root>

(Ä应该是第二个条目,但我想这是另一个问题)

但是当我使用命令行时,我得到一个错误:

java -jar saxon9he.jar -s:source.xml -o:out.xml -xsl:transformation.xsl


  XTDE1035: Collation file:/Users/<mypath>/german has not been defined
Failed to compile stylesheet. 1 error detected.
java-jarsaxon9he.jar-s:source.xml-o:out.xml-xsl:transformation.xsl
XTDE1035:排序规则文件:/Users//尚未定义德语
未能编译样式表。检测到1个错误。
看起来撒克逊人现在想使用
德语
作为文件。它不存在


问题是:如何在命令行上使用此样式表


如果合适的话,我还会问如何在两个“A.”条目之间对“Ä”进行排序,但我可以在另一个问题中问这个问题。

最简单的解决方案是根本不使用collation属性,而是使用

<xsl:sort lang="de"/>

它要求系统找到适合德语文本的排序规则,并且可以跨XSLT处理器移植

如果您确实想要更精确的排序规则,这里有关于构建Saxon排序规则URI的指导:

错误的原因是,当指定的值是相对URI引用时,它被解释为相对于样式表的基本URI。对于Saxon,这几乎不可避免地会产生一个不存在的排序规则URI。不清楚为什么规范允许相对排序URI;它们可能对某些产品有用,但对Saxon没有任何用处