роботы для exide с использованием FLWOR
-R (CARGAS PEQUEÑAS-MEDIANAS)
--RS080N
--RS003N
--RS010L
-CX (GRANDES CARGAS)
--CX110L
--CX210L
Мне нужен этот результат (ul внутри ul), используя этот xml
<robots>
<serie>
<codigo>R</codigo>
<descripcion>CARGAS PEQUEÑAS-MEDIANAS</descripcion>
</serie>
<serie>
<codigo>CX</codigo>
<descripcion>GRANDES CARGAS</descripcion>
</serie>
<robot>
<codigo serie="R">RS003N</codigo>
</robot>
<robot>
<codigo serie="R">RS010L</codigo>
</robot>
<robot>
<codigo serie="R">RS080N</codigo>
</robot>
<robot>
<codigo serie="CX">CX110L</codigo>
</robot>
<robot>
<codigo serie="CX">CX210L</codigo>
</robot>
</robots>
Я пробовал это
<section>
{for $i in doc("/db/exam/robots.xml")/robots/serie
return
<ul>
<li> <h3>Serie: {$i/codigo/text()} ({$i/descripcion/text()})</h3> </li>
<li>
<ul>
{for $h in $i/../robot
return <li> <h3>{$h/codigo/text()}</h3> </li>}
</ul>
</li>
</ul>
}
</section>
Но не работает. Есть идеи?
3 ответа
Решение
<li>
<ul>
{for $h in $i/../robot
where $h/codigo/@serie=$i/codigo
return <li> <h3>{$h/codigo/text()}</h3> </li>}
</ul>
</li>
Попробуйте так и посмотрите, работает ли он:
let $doc := """your xml above"""
for $i in $doc
let $codigo := $i//serie/codigo/text()
for $co in $codigo
return
<ul>
<li> <h3>Serie: {$co} ({$co/../following-sibling::descripcion/text()})</h3> </li>
<li>
<ul>
{for $h in $i/robot/codigo[@serie=$co]
return <li> <h3>{$h}</h3> </li>}
</ul>
</li>
</ul>
Может быть полезно сделать шаг назад и концептуально обдумать эту задачу.
С абстрактной точки зрения вам нужно
разделить роботов из серии
группировать роботов по сериям
для каждой группы найдите соответствующую серию (= присоединиться)
Как только вы это сделаете, получение окончательного результата сводится к двум простым вложенным выражениям FLWOR.
Надеюсь, это поможет!