xQuery:关联 2 个属性并返回与所述属性相关的数据
xQuery: Associating 2 attributes and returning data related to said attribute
我有一个 XML 文件,其中包含有关体育馆教练(监督员)和他们教的 activity(活动)的信息。我一直在尝试创建一个查询,该查询将 activities 元素中的监视器代码属性与 monitores 元素中每个监视器的详细信息相关联。
具体的任务是:"Return the details of each monitor that teaches an activity with 2 or more other monitors."
在活动元素中有两个元素有 2 个监视器。我可以使用以下代码获取这些:
for $test in doc("polideportivo.xml")/polideportivo/actividades/actividad/monitores
where count($test/monitor) > 1
return data($test/monitor/@codigo)
这给了我在每个 activity:
中出现不止一次的代码属性的结果
<results>m002 m003 m004 m005</results>
但我的问题在于将这些代码链接到 monitores 元素中的监视器代码时。
我起初想使用 let 将上述代码应用于变量,但它显示每个 activity 属性,而不是仅显示具有 2 个或更多属性的属性。
谁能给我指出正确的方向?
下面我将留下XML的片段:
<polideportivo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="polideportivo.xsd">
<monitores>
<monitor codigo="m001">
<nombre>Mario</nombre>
<apellidos>Cansado Pérez</apellidos>
<telefono>968222222</telefono>
<salario>1200</salario>
</monitor>
<monitor codigo="m002">...</monitor>
<monitor codigo="m003">...</monitor>
<monitor codigo="m004">...</monitor>
<monitor codigo="m005">...</monitor>
</monitores>
<actividades>
<actividad codigo="a10">
<nombre>Pilates</nombre>
<duracion>55</duracion>
<intensidad>Ligero</intensidad>
<lugar>Sala Fitness</lugar>
<horario>...</horario>
<monitores>
<monitor codigo="m001"/>
</monitores>
</actividad>
<actividad codigo="a20">
<nombre>Crosstraining</nombre>
<duracion>55</duracion>
<intensidad>Fuerte</intensidad>
<lugar>Sala Fitness</lugar>
<horario>
<sesion>
<día>Martes</día>
<horas>
<hora>10:00</hora>
<hora>16:00</hora>
<hora>20:00</hora>
</horas>
</sesion>
</horario>
<monitores>
<monitor codigo="m002"/>
<monitor codigo="m003"/>
</monitores>
</actividad>
看起来像
/*/monitores/monitor[
some $actividad in /*/actividades/actividad
satisfies
($actividad/monitores/monitor/@codigo = @codigo
and $actividad/monitores/monitor[2])]
是一个 XPath 2 及更高版本(这样也是一个 XQuery 1 及更高版本)表达你的口头描述(我不确定你是否想要检查两个或更多或至少两个监视器,示例检查至少两个。
我有一个 XML 文件,其中包含有关体育馆教练(监督员)和他们教的 activity(活动)的信息。我一直在尝试创建一个查询,该查询将 activities 元素中的监视器代码属性与 monitores 元素中每个监视器的详细信息相关联。
具体的任务是:"Return the details of each monitor that teaches an activity with 2 or more other monitors."
在活动元素中有两个元素有 2 个监视器。我可以使用以下代码获取这些:
for $test in doc("polideportivo.xml")/polideportivo/actividades/actividad/monitores
where count($test/monitor) > 1
return data($test/monitor/@codigo)
这给了我在每个 activity:
中出现不止一次的代码属性的结果<results>m002 m003 m004 m005</results>
但我的问题在于将这些代码链接到 monitores 元素中的监视器代码时。
我起初想使用 let 将上述代码应用于变量,但它显示每个 activity 属性,而不是仅显示具有 2 个或更多属性的属性。
谁能给我指出正确的方向?
下面我将留下XML的片段:
<polideportivo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="polideportivo.xsd">
<monitores>
<monitor codigo="m001">
<nombre>Mario</nombre>
<apellidos>Cansado Pérez</apellidos>
<telefono>968222222</telefono>
<salario>1200</salario>
</monitor>
<monitor codigo="m002">...</monitor>
<monitor codigo="m003">...</monitor>
<monitor codigo="m004">...</monitor>
<monitor codigo="m005">...</monitor>
</monitores>
<actividades>
<actividad codigo="a10">
<nombre>Pilates</nombre>
<duracion>55</duracion>
<intensidad>Ligero</intensidad>
<lugar>Sala Fitness</lugar>
<horario>...</horario>
<monitores>
<monitor codigo="m001"/>
</monitores>
</actividad>
<actividad codigo="a20">
<nombre>Crosstraining</nombre>
<duracion>55</duracion>
<intensidad>Fuerte</intensidad>
<lugar>Sala Fitness</lugar>
<horario>
<sesion>
<día>Martes</día>
<horas>
<hora>10:00</hora>
<hora>16:00</hora>
<hora>20:00</hora>
</horas>
</sesion>
</horario>
<monitores>
<monitor codigo="m002"/>
<monitor codigo="m003"/>
</monitores>
</actividad>
看起来像
/*/monitores/monitor[
some $actividad in /*/actividades/actividad
satisfies
($actividad/monitores/monitor/@codigo = @codigo
and $actividad/monitores/monitor[2])]
是一个 XPath 2 及更高版本(这样也是一个 XQuery 1 及更高版本)表达你的口头描述(我不确定你是否想要检查两个或更多或至少两个监视器,示例检查至少两个。