-1

-R (CARGAS PEQUEÑAS-MEDIANAS)

--RS080N

--RS003N

--RS010L

-CX(大卡车)

--CX110L

--CX210L

我需要使用此 xml 的结果(ul 中的 ul)

<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>

但它不起作用。有任何想法吗?

4

3 回答 3

0
<li>
  <ul>
    {for $h in $i/../robot
    where $h/codigo/@serie=$i/codigo
    return <li> <h3>{$h/codigo/text()}</h3> </li>}
 </ul>
</li>

于 2020-05-15T10:21:19.343 回答
0

试试这种方式,看看它是否有效:

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>  
于 2020-05-15T15:09:15.897 回答
0

退后一步从概念上考虑这项任务会很有帮助。

从抽象的角度来看,你需要做的是

  • 从系列中拆分机器人

  • 按系列分组机器人

  • 对于每个组,查找相应的系列 (=join)

完成此操作后,获得最终输出归结为两个简单的嵌套 FLWOR 表达式。

我希望这有帮助!

于 2020-05-15T15:19:52.520 回答