我正在使用亚马逊合作伙伴API来获取有关产品的一些信息。他们有一个XML元素来获取产品的类似物:
<BrowseNodes>
<BrowseNode>
<BrowseNodeId>464711031</BrowseNodeId>
<Name>Soutiens-gorge de tous les jours</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>464710031</BrowseNodeId>
<Name>Soutiens-gorge</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>464709031</BrowseNodeId>
<Name>Lingerie</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>436559031</BrowseNodeId>
<Name>Femme</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>340856031</BrowseNodeId>
<Name>Catégories</Name>
<IsCategoryRoot>1</IsCategoryRoot>
<Ancestors>
<BrowseNode>
...
等等。有时只有三个后代有时更多......
所以我的问题是,如果不用for循环猜测,我怎么能算出有多少后代呢?
我的第二个问题是,如何将下一个代码放入for循环中?我没有看到......
$cL = $item->BrowseNodes->BrowseNode;
if(isset($cL)){
$catTree[] = (string)$cL->Name;
$cL0 = $cL->Ancestors->BrowseNode;
if(isset($cL0)){
$catTree[] = (string)$cL0->Name;
$cL1 = $cL0->Ancestors->BrowseNode;
if(isset($cL1)){
$catTree[] = (string)$cL1->Name;
$cL2 = $cL1->Ancestors->BrowseNode;
if(isset($cL2)){
$catTree[] = (string)$cL2->Name;
$cL3 = $cL2->Ancestors->BrowseNode;
if(isset($cL3)){
$catTree[] = (string)$cL3->Name;
...
并且还继续......
实际上这段代码正在运行,但我确信它可能会更简单......只是不知道如何。
非常感谢您的帮助:)
答案 0 :(得分:2)
要计算元素,您不需要使用循环。试试这个。
$xml = "<BrowseNodes>
<BrowseNode>
<BrowseNodeId>464710031</BrowseNodeId>
<Name>Soutiens-gorge</Name>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>464710033</BrowseNodeId>
<Name>Soutiens-gorge333</Name>
</BrowseNode>
</BrowseNodes>";
$xml = new SimpleXMLElement($xml);
$xml->xpath("/BrowseNode");
echo "count: ".$xml->count();
但是如果你想使用循环,那么在这种情况下它将不起作用。你需要递归,如@ 1nflktd
所述答案 1 :(得分:2)
使用XPath:
$document = new DOMDocument();
$document->load( "your-file.xml" );
$xpath = new DOMXpath($document);
$count = $xpath->evaluate("count(/BrowseNodes//BrowseNode)");
您还可以使用XPath选择所有节点并提取所需的值。