当前位置: 首页 > 知识库问答 >
问题:

XSL/Saxon排序规则/命令行

慎志国
2023-03-14

我想在基于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.

看起来好像saxon现在想要使用german作为文件。它不存在。

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

如果合适的话,我还想问一下如何在两个“A”之间排序“?”但我可以在另一个问题中问这个。

共有1个答案

戈巴英
2023-03-14

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

<xsl:sort lang="de"/>

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

如果您确实想要一个更精确的排序规则,可以在这里获得关于构造Saxon排序规则URI的指导:http://www.saxonica.com/documentation/extensibility/collation.xml

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

 类似资料:
  • 问题内容: 我正在读的书说 SQL Server支持两种字符数据类型-常规和Unicode。 常规数据类型包括CHAR和VARCHAR,而Unicode数据类型包括NCHAR和NVARCHAR。不同之处在于,常规字符为每个字符使用一个字节的存储空间,而Unicode字符则每个字符需要两个字节的存储空间。每个字符只有一个字节的存储空间,因此,为一列选择常规字符类型会限制您只能选择英语以外的一种语言,

  • 1. UI 节点排序 UI 的渲染排序采用的是一个广度优先的排序方式,每一个 UITransform 组件身上都有一个 priority 属性,根据 priority 的值来调整节点顺序。排序从根节点下的子节点开始,根据子节点的优先级来确定整体的渲染结构,也就是根节点下的子节点的排序已经决定了最终的渲染顺序。每一个节点下的所有子节点的 priority 则用来确定在当前节点下的渲染顺序。 举个例子

  • 有人能发布详细的分步说明如何安装Saxon(10 HE)以及如何从MacOS(10.13.6)中的命令行运行转换吗? 我已经在我的计算机上安装了Java 我已经下载了SaxonHE10-6J。来自SourceForge的zip文件 根据这里的建议,我放置了saxon-he-10.6。jar位于myUserName/Library/Java/Extensions文件夹中 然后,我打开终端应用程序并根

  • 问题内容: 查看我的产品日志后,我提到了一些错误: Alghout我在cfg教义下拥有UTF-8默认值: 看来我所有的MySQL表都在其中,所以我的问题是: 我可以为所有表手动将排序规则更改为,而没有任何复杂性/注意事项吗? 问题答案: 了解以下定义会有所帮助: 甲 字符编码 信息的每个符号是如何以二进制表示(并因此存储在计算机)。例如,符号(U + 00E9,拉丁小字母E急性)被编码为在UTF-

  • 问题内容: 如何查看表具有的排序规则?IE浏览器,我想看: 问题答案: 显示有关表的信息,包括排序规则。 例如

  • 问题内容: 我有两个表,它们使用的是不同的排序规则。不允许串联来自具有不同排序规则的表中的列,例如,不允许使用以下SQL, 我的问题是,如何在不破坏表数据的情况下更改表的排序规则? 在此先感谢,乔治 问题答案: 您可以根据需要随时更改列排序规则。 例如 “数据库默认值”可以是您要使用的任何排序规则。 您可以使用以下方法永久更改列的排序规则