2012-05-16 30 views
2

我想在基于Saxon的xslt转换中使用归类。源文件:XSL/Saxon归类/命令行

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

(在A应该是第二项,但这是另一个问题,我猜)

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

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. 

看起来好像撒克逊现在想用german作为文件。它不存在。


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

如果合适,我还会问如何得到两个“A”之间的“Ä”。条目,但我可以在另一个问题中提出这个问题。

回答

3

最简单的解决方法是不使用排序属性可言,但使用

<xsl:sort lang="de"/> 

它要求系统找到适合德国文本整理,并且是跨XSLT处理器便携。

如果你想更精确的整理,对在这里建造撒克逊整理的URI指导:http://www.saxonica.com/documentation/extensibility/collation.xml

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