can';t访问xml节点PHP

can';t访问xml节点PHP,php,xml,Php,Xml,我有一个php页面,需要解析xml。 例如,我已经这样做了: $hotelNodes = $xml_data->getElementsByTagName('Hotel'); foreach($hotelNodes as $hotel){ $supplementsNodes2 = $hotel->getElementsByTagName('BoardBase'); foreach($supplementsNodes2 as $suppl2) {

我有一个php页面,需要解析xml。 例如,我已经这样做了:

$hotelNodes = $xml_data->getElementsByTagName('Hotel');
   foreach($hotelNodes as $hotel){
      $supplementsNodes2 = $hotel->getElementsByTagName('BoardBase');
      foreach($supplementsNodes2 as $suppl2) {
         echo'<p>HERE</p>'; //not enter here
      }
   }
}

但是没有成功

2我可以从一开始就看到:XML名称区分大小写,因此:

无法工作,因为您的xml节点看起来像:

<hotel desc="DESC" name="Hotel">
这只是简单的无效标记,它应该是:

<occupancy></occupancy>

正如您所看到的。

2我可以从一开始就看到的问题:XML名称区分大小写,因此:

无法工作,因为您的xml节点看起来像:

<hotel desc="DESC" name="Hotel">
这只是简单的无效标记,它应该是:

<occupancy></occupancy>

正如您所看到的。

Alessandro,您的XML太乱了(=联合国赌场),您确实需要弄清楚这一点。埃利亚斯的回答指出了一些必须考虑的基本问题。 我建立在Elias设置的代码板上,它与我完美配合:

$dom = new DOMDocument;
$dom->loadXML($xml);

$hotels = $dom->getElementsByTagName('hotel');
foreach ($hotels as $hotel) {
    $bbs = $hotel->getElementsByTagName('boardbase');
    foreach ($bbs as $bb) echo $bb->getAttribute('bbname');
}

请参见

Alessandro,您的XML乱七八糟(=联合国赌场),您确实需要弄清楚这一点。埃利亚斯的回答指出了一些必须考虑的基本问题。 我建立在Elias设置的代码板上,它与我完美配合:

$dom = new DOMDocument;
$dom->loadXML($xml);

$hotels = $dom->getElementsByTagName('hotel');
foreach ($hotels as $hotel) {
    $bbs = $hotel->getElementsByTagName('boardbase');
    foreach ($bbs as $bb) echo $bb->getAttribute('bbname');
}

请参见。。我已经指定这是一个xml的piec,占用率是一个节点关闭的isn0t,这是一个问题,酒店小写不是一个问题这在我的代码中运行良好,你还没有解决我关于节点boardbase的问题,没有帮助this@AlessandroMinoccheri:我已经更新了代码板。区分大小写是一个问题
getElementsByTagName('Hotel')
不是无效的,因此它不会出错,它只会返回一个
DOMNodeList
的空实例。这就是为什么你不能进入内环。。。就这么简单,我已经发现了问题,firebug内部写的是boardbase,但真正的节点xml是boardbase。我不明白为什么firebug打印我小写所有nodesWell。。我已经指定这是一个xml的piec,占用率是一个节点关闭的isn0t,这是一个问题,酒店小写不是一个问题这在我的代码中运行良好,你还没有解决我关于节点boardbase的问题,没有帮助this@AlessandroMinoccheri:我已经更新了代码板。区分大小写是一个问题
getElementsByTagName('Hotel')
不是无效的,因此它不会出错,它只会返回一个
DOMNodeList
的空实例。这就是为什么你不能进入内环。。。就这么简单,我已经发现了问题,firebug内部写的是boardbase,但真正的节点xml是boardbase。我不明白为什么firebug print I小写字母都是nodesI对不起,朋友,没有正确的信息我们无能为力…顺便说一句,你有点粗鲁,这里有人在帮助别人,所以,不要对你的评论太过激烈。不要太咄咄逼人,只想在回答之前尝试代码是一个好方法只有这样,如果我给你留下了这样的印象,我不想变得粗鲁和抱歉,所以抱歉@RobertRozasI我很抱歉,朋友,没有适当的信息,我们无能为力……顺便说一句,你有点粗鲁,这里有人在帮助别人,所以,不要对你的评论太苛刻。不要咄咄逼人,只想在回答之前是一个尝试代码的好方法,如果我给人留下了这样的印象,我不想显得粗鲁和抱歉,所以抱歉@robertrozas,我已经更新了我的代码板,并在编辑我的答案时链接到了它。它在那里也很好用。。。我还添加了到官方W3CXML规范的链接:名称区分大小写。这就是问题所在here@EliasVanOotegem当然。是的,问题是区分大小写的,真正的问题是firebug打印xml节点都是小写的,这不是事实。在这种情况下,boardbase与BoardbaseWell不同。我已经更新了我的代码板,并在我的“编辑到我的答案”中链接到它。它在那里也很好用。。。我还添加了到官方W3CXML规范的链接:名称区分大小写。这就是问题所在here@EliasVanOotegem当然。是的,问题是区分大小写的,真正的问题是firebug打印xml节点都是小写的,在这种情况下boardbase与boardbase不同,这不是事实
<occupancies></occupancies>
$xml = '<hotel desc="DESC" name="Hotel">
    <selctedsupplements>
        <boardbases>
            <boardbase bbpublishprice="0" bbprice="0" bbname="Colazione Continentale" bbid="1"></boardbase>
        </boardbases>
    </selctedsupplements>
    <occupancy></occupancy>
</hotel>';
$dom = new DOMDocument;
$dom->loadXML($xml);
$badList = $dom->getElementsByTagName('Hotel');
$correctList = $dom->getElementsByTagName('hotel');
echo sprintf("%d",$badList->lenght),
    ' compared to ',
    $correctList->length, PHP_EOL;
$hotels = $dom->getElementsByTagName('html');
foreach($hotels as $hotel)
{
    $supplementsNodes2 = $hotel->getElementsByTagName('boardbase');
    foreach($supplementsNodes2 as $node)
    {
        var_dump($node);//you _will_ get here now
    }
}
$dom = new DOMDocument;
$dom->loadXML($xml);

$hotels = $dom->getElementsByTagName('hotel');
foreach ($hotels as $hotel) {
    $bbs = $hotel->getElementsByTagName('boardbase');
    foreach ($bbs as $bb) echo $bb->getAttribute('bbname');
}