PHP Foreach 保存 ID

我有所谓的“GAEB”文件,它们是 XML 结构的。我通过 foreach 和 simplexml 遍历这些。


XML/GAEB 文件:


<GAEB>

  <Award>

    <BoQ>

      <BoQBody>

        <BoQCtgy RNoPart="01">

          <BoQBody>

            <BoQCtgy RNoPart="01">

              <BoQBody>

                <BoQCtgy>

                  <BoQBody RNoPart="01">

                    <Itemlist>

                      <Item RNoPart="1">

                      <Item RNoPart="2">

                    </Itemlist>

                  </BoQBody>

                </BoQCtgy>

                <BoQCtgy>

                  <BoQBody RNoPart="02">

                    <Itemlist>

                      <Item RNoPart="1">

                      <Item RNoPart="2">

                    </Itemlist>

                  </BoQBody>

                </BoQCtgy>

              </BoQBody>

            </BoQCtgy>

            <BoQCtgy RNoPart="02">

              <BoQBody>

                <BoQCtgy>

                  <BoQBody RNoPart="01">

                    <Itemlist>

                      <Item RNoPart="1">

                      <Item RNoPart="2">

                    </Itemlist>

                  </BoQBody>

                </BoQCtgy>

                <BoQCtgy>

                  <BoQBody RNoPart="02">

                    <Itemlist>

                      <Item RNoPart="1">

                      <Item RNoPart="2">

                    </Itemlist>

                  </BoQBody>

                </BoQCtgy>

              </BoQBody>

            </BoQCtgy>

          </BoQBody>

        </BoQCtgy>

      </BoQBody>

    </BoQ>

  </Award>

</GAEB>

我的 PHP 代码循环遍历所有 $xml->BoQBody->BoQCtgy 直到找到一个 Itemlist。然后遍历该 Itemlist 并从那里获取一些信息。之后再次开始循环。


PHP:


<?php

$file = "pathtoxmlfile";

$xml = simplexml_load_file($file);


function loop($path, $xml){

  foreach($path->BoQBody->BoQCtgy as $BoQCtgy){

    $nr = $BoQCtgy->attributes()["RNoPart"];

    echo $nr;      


问是,深度每次都是另一个。我使用 PHP 代码获得了我需要的所有位置和所有值,没有任何问题。但是我找不到匹配的编号...


一只名叫tom的猫
浏览 145回答 1
1回答

慕桂英546537

使用 XPath,您不必担心项目的深度。在这种情况下,它首先使用...查找具有RNoPart属性的任何节点//*[@RNoPart]// - 任何级别任何节点[@RNoPart] - 带有 RNoPart 属性(@表示属性)它循环遍历结果,然后使用ancestorXPath 中的轴来查找具有另一个 RNoPart 属性的所有父元素,使用ancestor::*/@RNoPart.当它循环这些(在本例中)时,它只输出值,然后.在每个子集之后加上 a 和一个新行。所以放在一起,你得到...foreach ( $xml->xpath("//*[@RNoPart]") as $part )&nbsp; &nbsp;{&nbsp; &nbsp; foreach ( $part['RNoPart']->xpath("ancestor::*/@RNoPart") as $part )&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; echo $part.".";&nbsp; &nbsp; }&nbsp; &nbsp; echo PHP_EOL;}并使用您的示例 XML,输出...01.01.01.01.01.01.01.01.01.1.01.01.01.2.01.01.02.01.01.02.1.01.01.02.2.01.02.01.02.01.01.02.01.1.01.02.01.2.01.02.02.01.02.02.1.01.02.02.2.
打开App,查看更多内容
随时随地看视频慕课网APP