下面是我的带命名空间的xml
<?xml version="1.0" encoding="UTF-8"?>
<hotels xmlns="http://www.test.com/schemas/messages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://www.test.com/schemas/messages">
<hotel >
<rooms>
<room>
<rates>
<rate id="1" adults="1" child="0"></rate>
<rate id="2" adults="2" child="0"></rate>
<rate id="3" adults="1" child="0"></rate>
</rates>
</room>
<room>
<rates>
<rate id="4" adults="1" child="0"></rate>
<rate id="5" adults="2" child="0"></rate>
<rate id="6" adults="2" child="0"></rate>
</rates>
</room>
</rooms>
</hotel>
</hotels>
我使用foreach尝试下面的PHP代码(xpath)来获取ratenode的值
$xd = simplexml_load_file('C:/inetpub/vhosts/test.com/data_download/q.xml');
$xd->registerXPathNamespace("n", "http://www.test.com/schemas/messages");
foreach($xd->xpath("//n:hotels/n:hotel") as $xd_item)
{
echo 'item - A';
foreach($xd_item->xpath("rooms/room") as $xd_room)
{
foreach($xd_room->xpath("rates/rate") as $xd_rate)
{
echo 'rate - C';
}
}
}
在$ xd_item的foreach中无效。我的意思是第二个foreach结束了值"echo 'item - A';"
任何人都可以帮助我吗?
答案 0 :(得分:0)
正如@kjhughes在他的评论中所提到的,代码的问题是某些元素在默认命名空间中,但是你的XPath错过了在这些元素上使用相应的前缀。此外,您的代码打印静态文字字符串,即'item - A'
和'rate - C'
,而不是正在解析的XML的任何部分。
“可以在dom中写出像
$xd->xpath("rates/rate[@id='1']")
这样的条件
是的,这是可能的。也可以使用SimpleXML,例如:
$xd->registerXPathNamespace("n", "http://www.test.com/schemas/messages");
foreach($xd->xpath("//n:rate[@id='1']") as $rate){
echo $rate["id"] .", ". $rate["adults"] .", ". $rate["child"] ."\r\n";
}
<强> eval.in demo
强>
输出
//id, adults, rate
1, 1, 0
答案 1 :(得分:0)
变量The imported module "some module in .pyx" can not be found
的类型为SimpleXMLElement,您可以从中访问其房间属性,例如:
$xd_item
这将返回SimpleXMLElement类型的对象,您可以从中获取费率,并且可以使用$xd_item->rooms->room
循环。您希望从&#39;率&#39;中获得的值在attributes
例如:
foreach