首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用氧气XML编辑器上的撒克逊处理器在XQuery中使用order BY时得到错误的顺序

使用氧气XML编辑器上的撒克逊处理器在XQuery中使用order BY时得到错误的顺序
EN

Stack Overflow用户
提问于 2012-06-04 14:47:18
回答 1查看 302关注 0票数 1

这是我的第一篇文章,我正在寻求一些帮助,因为我已经尝试了我可以没有任何运气。

因此,我试图使用一些简单的XQuery从XML文件中获取一些数据(如下所示),但是我很难对结果进行排序,因为结果不像预期的那样出现。

输入文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<database name="MyDB">
    <constraints>
        <constraint name="ASIGNATURAS_MATRICULADAS_CHK1">
            <type>C</type>
            <table-name>ASIGNATURAS_MATRICULADAS</table-name>
            <condition>CONVOCATORIAS_AGOTADAS &gt;= 0 AND CONVOCATORIAS_AGOTADAS &lt; 6</condition>
        </constraint>
        <constraint name="SYS_C0029035">
            <type>C</type>
            <table-name>ASIGNATURAS_MATRICULADAS</table-name>
            <condition>&quot;CONVOCATORIAS_AGOTADAS&quot; IS NOT NULL</condition>
        </constraint>
        <constraint name="SYS_C0029034">
            <type>C</type>
            <table-name>ASIGNATURAS_MATRICULADAS</table-name>
            <condition>&quot;COD_ASIGNATURA&quot; IS NOT NULL</condition>
        </constraint>
        <constraint name="SYS_C0029033">
            <type>C</type>
            <table-name>ASIGNATURAS_MATRICULADAS</table-name>
            <condition>&quot;NIF_ALUMNO&quot; IS NOT NULL</condition>
        </constraint>
        <constraint name="SYS_C0029031">
            <type>C</type>
            <table-name>ASIGNATURAS</table-name>
            <condition>&quot;CODIGO&quot; IS NOT NULL</condition>
        </constraint>
        <constraint name="SYS_C0029027">
            <type>C</type>
            <table-name>ALUMNOS</table-name>
            <condition>&quot;NIF&quot; IS NOT NULL</condition>
        </constraint>
        <constraint name="SYS_C0029029">
            <type>C</type>
            <table-name>ALUMNOS</table-name>
            <condition>&quot;PRIMER_APELLIDO&quot; IS NOT NULL</condition>
        </constraint>
        <constraint name="SYS_C0029028">
            <type>C</type>
            <table-name>ALUMNOS</table-name>
            <condition>&quot;NOMBRE&quot; IS NOT NULL</condition>
        </constraint>
        <constraint name="ASIGNATURAS_MATRICULADAS_FK1">
            <type>R</type>
            <table-name>ASIGNATURAS_MATRICULADAS</table-name>
            <referenced-constraint-name>ALUMNOS_PK</referenced-constraint-name>
        </constraint>
        <constraint name="ASIGNATURAS_MATRICULADAS_FK2">
            <type>R</type>
            <table-name>ASIGNATURAS_MATRICULADAS</table-name>
            <referenced-constraint-name>ASIGNATURAS_PK</referenced-constraint-name>
        </constraint>
        <constraint name="ALUMNOS_PK">
            <type>P</type>
            <table-name>ALUMNOS</table-name>
            <column-name>NIF</column-name>
        </constraint>
        <constraint name="ASIGNATURAS_PK">
            <type>P</type>
            <table-name>ASIGNATURAS</table-name>
            <column-name>CODIGO</column-name>
        </constraint>
    </constraints>
</database>

我试图做的是一些非常简单的事情,得到所有的约束类型"C“,并显示它们的名称,按字母顺序排序。

这是XQuery:

代码语言:javascript
复制
<check-constraints>
{
for $r in doc("DB.xml")//constraint[type = 'C']/@name
order by $r
return <constraint>{data($r)}</constraint>
}
</check-constraints>

我所期望的结果如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<check-constraints>
   <constraint>ASIGNATURAS_MATRICULADAS_CHK1</constraint>
   <constraint>SYS_C0029027</constraint>
   <constraint>SYS_C0029028</constraint>
   <constraint>SYS_C0029029</constraint>
   <constraint>SYS_C0029031</constraint>
   <constraint>SYS_C0029033</constraint>
   <constraint>SYS_C0029034</constraint>
   <constraint>SYS_C0029035</constraint>
</check-constraints>

但相反,我得到了这样的结果:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<check-constraints>
   <constraint>SYS_C0029031</constraint>
   <constraint>ASIGNATURAS_MATRICULADAS_CHK1</constraint>
   <constraint>SYS_C0029027</constraint>
   <constraint>SYS_C0029028</constraint>
   <constraint>SYS_C0029029</constraint>
   <constraint>SYS_C0029035</constraint>
   <constraint>SYS_C0029034</constraint>
   <constraint>SYS_C0029033</constraint>
</check-constraints>

我做错了什么?为什么“按顺序”不按其应有的顺序排序?如果我不按文件中列出的顺序输入"order“,这是有意义的,因为节点是在找到节点时输入的。

编辑:正如建议的那样,显然可能是XQuery处理器造成的。在本例中,我正在研究氧气,它使用Saxon处理器作为默认处理程序。我刚试过佐尔巴,它在那里很管用。所以现在我更困惑了,哪个是正确的输出?

解决了:输入文件在某些值上包含随机长度的BOM字符数(错误),并且它们是不可见的,因此它使排序停止。把他们带走会让事情如期而至。

EN

回答 1

Stack Overflow用户

发布于 2012-06-04 17:29:45

在Saxon9.4中从命令行运行时,查询将给出预期的结果。在oXygen 13.1 (使用Saxon9.3.0.5)中,它对我也是正确的。所以它一定与你运行它的方式有关。也许您的查询场景是错误的,所以您没有使用正确的文件?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10883290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档