我有所謂的“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 代碼獲得了我需要的所有位置和所有值,沒有任何問題。但是我找不到匹配的編號...
1 回答

慕桂英546537
TA貢獻1848條經驗 獲得超10個贊
使用 XPath,您不必擔心項目的深度。在這種情況下,它首先使用...查找具有RNoPart
屬性的任何節點//*[@RNoPart]
// - 任何級別
任何節點
[@RNoPart] - 帶有 RNoPart 屬性(
@
表示屬性)
它循環遍歷結果,然后使用ancestor
XPath 中的軸來查找具有另一個 RNoPart 屬性的所有父元素,使用ancestor::*/@RNoPart
.
當它循環這些(在本例中)時,它只輸出值,然后.
在每個子集之后加上 a 和一個新行。
所以放在一起,你得到...
foreach ( $xml->xpath("//*[@RNoPart]") as $part ) {
foreach ( $part['RNoPart']->xpath("ancestor::*/@RNoPart") as $part ) {
echo $part.".";
}
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.
- 1 回答
- 0 關注
- 166 瀏覽
添加回答
舉報
0/150
提交
取消