我有以下SimpleXML对象:
SimpleXMLElement Object
(
[@attributes] => Array
(
[status] => ok
)
[a] => SimpleXMLElement Object
(
[b] => Array
(
[0] => SimpleXMLElement Object
(
[c] => Google
[d] => GOOG
[e] => http://www.google.com
)
[1] => SimpleXMLElement Object
(
[c] => Yahoo
[d] => YHOO
[e] => http://www.yahoo.com
)
[2] => SimpleXMLElement Object
(
[c] => Microsoft
[d] => MSFT
[e] => http://www.microsoft.com
)
鉴于d
我希望得到e
- 由于b
是一个数组,有没有办法在没有遍历整个数组的情况下执行此操作?
<stk status="ok">
<a>
<b>
<c>Yahoo</c>
<d>YHOO</d>
<e>http://www.yahoo.com</e>
</b>
<b>
<c>Google</c>
<d>GOOG</d>
<e>http://www.google.com</e>
</b>
<b>
<c>Microsoft</c>
<d>MSFT</d>
<e>http://www.microsoft.com</e>
</b>
</a>
</stk>
答案 0 :(得分:2)
您可以使用XPath查询,要求e
元素是b
个元素的子元素,其中d
个元素的文本为YHOO
。
请记住,SimpleXMLElement::xpath()
将返回一个元素数组,即使XPath只找到一个元素:因此$urls[0]
得到第一个(唯一)元素。
$xml = '<stk status="ok"><a><b><c>Yahoo</c><d>YHOO</d><e>http://www.yahoo.com</e></b><b><c>Google</c><d>GOOG</d><e>http://www.google.com</e></b><b><c>Microsoft</c><d>MSFT</d><e>http://www.microsoft.com</e></b></a></stk>';
$stk = simplexml_load_string($xml);
$urls = $stk->xpath('/stk/a/b[d="YHOO"]/e');
$yhoo = (string) $urls[0];
echo $yhoo;
答案 1 :(得分:0)
迭代所有//d
。
对于每一个,请评估following-sibling::e[1]
。
我认为这就是Marc B的意思。