这是我的第一篇文章,我正在寻求一些帮助,因为我已经尝试了我可以没有任何运气。
因此,我试图使用一些简单的XQuery从XML文件中获取一些数据(如下所示),但是我很难对结果进行排序,因为结果不像预期的那样出现。
输入文件:
<?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 >= 0 AND CONVOCATORIAS_AGOTADAS < 6</condition>
</constraint>
<constraint name="SYS_C0029035">
<type>C</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<condition>"CONVOCATORIAS_AGOTADAS" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029034">
<type>C</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<condition>"COD_ASIGNATURA" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029033">
<type>C</type>
<table-name>ASIGNATURAS_MATRICULADAS</table-name>
<condition>"NIF_ALUMNO" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029031">
<type>C</type>
<table-name>ASIGNATURAS</table-name>
<condition>"CODIGO" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029027">
<type>C</type>
<table-name>ALUMNOS</table-name>
<condition>"NIF" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029029">
<type>C</type>
<table-name>ALUMNOS</table-name>
<condition>"PRIMER_APELLIDO" IS NOT NULL</condition>
</constraint>
<constraint name="SYS_C0029028">
<type>C</type>
<table-name>ALUMNOS</table-name>
<condition>"NOMBRE" 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:
<check-constraints>
{
for $r in doc("DB.xml")//constraint[type = 'C']/@name
order by $r
return <constraint>{data($r)}</constraint>
}
</check-constraints>我所期望的结果如下:
<?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>但相反,我得到了这样的结果:
<?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字符数(错误),并且它们是不可见的,因此它使排序停止。把他们带走会让事情如期而至。
发布于 2012-06-04 17:29:45
在Saxon9.4中从命令行运行时,查询将给出预期的结果。在oXygen 13.1 (使用Saxon9.3.0.5)中,它对我也是正确的。所以它一定与你运行它的方式有关。也许您的查询场景是错误的,所以您没有使用正确的文件?
https://stackoverflow.com/questions/10883290
复制相似问题