【发布时间】:2017-03-21 22:17:19
【问题描述】:
我正在努力解析这个 XML 结构:
<BrowseNodes>
<BrowseNode>
<BrowseNodeId>6388960011</BrowseNodeId>
<Name>Road Bike Frames</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>1266090011</BrowseNodeId>
<Name>Bike Frames</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>3403201</BrowseNodeId>
<Name>Cycling</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>706814011</BrowseNodeId>
<Name>Outdoor Recreation</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>3375301</BrowseNodeId>
<Name>Categories</Name>
<IsCategoryRoot>1</IsCategoryRoot>
<Ancestors>
<BrowseNode>
<BrowseNodeId>3375251</BrowseNodeId>
<Name>Sports & Outdoors</Name>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
<BrowseNode>
<BrowseNodeId>11130424011</BrowseNodeId>
<Name>Outdoor Recreation Features</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>3375251</BrowseNodeId>
<Name>Sports & Outdoors</Name>
</BrowseNode>
</Ancestors>
</BrowseNode>
</BrowseNodes>
如您所见,每个子元素都有相同的名称。我已经看到了一些使用 Xpath 等的示例……但似乎无法理解它。另外,我试过数孩子,但这显然只算第一级……所以那里没有骰子。与试图查看每个的所有子节点相同(假设 $nodes 是基于上述 xml 的 BrowseNodes)。
理想情况下,我想直接在<IsCategoryRoot>1</IsCategoryRoot> 下获取 BrowseNode。同样,我的第一个想法是计算 的孩子,但它停留在第一级。
foreach($nodes->BrowseNode->children() as $child) {
echo $child->getName() . "<br>";
}
感谢任何帮助。我确定我错过了一些简单的东西。
这是当项目在 simplexml 中时返回的内容(请记住,此时我已经在使用 SimpleXML 对象 - 例如,我以 $whateverItem->BrowseNodes 的形式访问它:
object(SimpleXMLElement)#6 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#5 (3) {
["BrowseNodeId"]=>
string(7) "3403551"
["Name"]=>
string(19) "Resistance Trainers"
["Ancestors"]=>
object(SimpleXMLElement)#9 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#10 (3) {
["BrowseNodeId"]=>
string(10) "6389526011"
["Name"]=>
string(27) "Bike Trainers & Accessories"
["Ancestors"]=>
object(SimpleXMLElement)#11 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#12 (3) {
["BrowseNodeId"]=>
string(7) "3403201"
["Name"]=>
string(7) "Cycling"
["Ancestors"]=>
object(SimpleXMLElement)#13 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#14 (3) {
["BrowseNodeId"]=>
string(9) "706814011"
["Name"]=>
string(18) "Outdoor Recreation"
["Ancestors"]=>
object(SimpleXMLElement)#15 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#16 (4) {
["BrowseNodeId"]=>
string(7) "3375301"
["Name"]=>
string(10) "Categories"
["IsCategoryRoot"]=>
string(1) "1"
["Ancestors"]=>
object(SimpleXMLElement)#17 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#18 (2) {
["BrowseNodeId"]=>
string(7) "3375251"
["Name"]=>
string(17) "Sports & Outdoors"
}
}
}
}
}
}
}
}
}
}
}
}
object(SimpleXMLElement)#5 (1) {
["BrowseNode"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#3 (3) {
["BrowseNodeId"]=>
string(7) "3403551"
["Name"]=>
string(19) "Resistance Trainers"
["Ancestors"]=>
object(SimpleXMLElement)#11 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#12 (3) {
["BrowseNodeId"]=>
string(10) "6389526011"
["Name"]=>
string(27) "Bike Trainers & Accessories"
["Ancestors"]=>
object(SimpleXMLElement)#13 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#14 (3) {
["BrowseNodeId"]=>
string(7) "3403201"
["Name"]=>
string(7) "Cycling"
["Ancestors"]=>
object(SimpleXMLElement)#15 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#16 (3) {
["BrowseNodeId"]=>
string(9) "706814011"
["Name"]=>
string(18) "Outdoor Recreation"
["Ancestors"]=>
object(SimpleXMLElement)#17 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#18 (4) {
["BrowseNodeId"]=>
string(7) "3375301"
["Name"]=>
string(10) "Categories"
["IsCategoryRoot"]=>
string(1) "1"
["Ancestors"]=>
object(SimpleXMLElement)#19 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#20 (2) {
["BrowseNodeId"]=>
string(7) "3375251"
["Name"]=>
string(17) "Sports & Outdoors"
}
}
}
}
}
}
}
}
}
}
}
[1]=>
object(SimpleXMLElement)#10 (3) {
["BrowseNodeId"]=>
string(11) "11130424011"
["Name"]=>
string(27) "Outdoor Recreation Features"
["Ancestors"]=>
object(SimpleXMLElement)#11 (1) {
["BrowseNode"]=>
object(SimpleXMLElement)#12 (2) {
["BrowseNodeId"]=>
string(7) "3375251"
["Name"]=>
string(17) "Sports & Outdoors"
}
}
}
}
}
【问题讨论】:
-
尝试递归函数,如果没有返回结果,测试是否有子召回函数