Php SimpleXMLElement对象缺少节点
我使用simplexml\u load\u字符串来解析XML数据。一切都进展顺利,只有一个例外,某些子节点似乎丢失了。以下是原始XML输出的示例:Php SimpleXMLElement对象缺少节点,php,xml,simplexml,Php,Xml,Simplexml,我使用simplexml\u load\u字符串来解析XML数据。一切都进展顺利,只有一个例外,某些子节点似乎丢失了。以下是原始XML输出的示例: <LEAGUE Name="NFL Football"> <EVENT GameID="371667" Title="Kansas City Chiefs at Oakland Raiders" Date="2014-11-20" Time="20:25" Timezone="EST" Status="SCHEDULED"
<LEAGUE Name="NFL Football">
<EVENT GameID="371667" Title="Kansas City Chiefs at Oakland Raiders" Date="2014-11-20" Time="20:25" Timezone="EST" Status="SCHEDULED" Enabled="true">
<TOTALS Over="42.5" OverOdds="-110.0" OverEnabled="true" Under="42.5" UnderOdds="-110.0" UnderEnabled="true"/>
<CONTESTANT Name="Kansas City" Score="0" RotationNumber="109">
<LINE Money="-355.0" MoneyEnabled="true" Points="-7.5" Odds="-115.0" PointsEnabled="true"/>
</CONTESTANT>
<CONTESTANT Name="Oakland" Score="0" RotationNumber="110">
<LINE Money="295.0" MoneyEnabled="true" Points="7.5" Odds="-105.0" PointsEnabled="true"/>
</CONTESTANT>
</EVENT>
子节点的数据在那里(Money、MoneyEnabled等),但它不在行节点中。事实上,我一直无法通过SimpleXML对象访问此信息。使用CakePHP的调试函数,行数据甚至不会显示。我到处都在使用这个函数,这是唯一一次没有显示任何SimpleXML数据。使用CakePHP的调试:
object(SimpleXMLElement) {
@attributes => array(
'GameID' => '371667',
'Title' => 'Kansas City Chiefs at Oakland Raiders',
'Date' => '2014-11-20',
'Time' => '20:25',
'Timezone' => 'EST',
'Status' => 'SCHEDULED',
'Enabled' => 'true'
)
TOTALS => object(SimpleXMLElement) {
@attributes => array(
'Over' => '42.5',
'OverOdds' => '-110.0',
'OverEnabled' => 'true',
'Under' => '42.5',
'UnderOdds' => '-110.0',
'UnderEnabled' => 'true'
)
}
CONTESTANT => array(
(int) 0 => object(SimpleXMLElement) {
@attributes => array(
'Name' => 'Kansas City',
'Score' => '0',
'RotationNumber' => '109'
)
},
(int) 1 => object(SimpleXMLElement) {
@attributes => array(
'Name' => 'Oakland',
'Score' => '0',
'RotationNumber' => '110'
)
}
)
如您所见,每个参赛者节点下都没有线条节点 不知道蛋糕,但不要相信
print\u r
和var\u dump()
和SimpleXML
宁可
$xml = simplexml_load_string($x); // assume XML in $x
echo $xml->asXML();
瞧,XML已经完成了,请参见实际操作:var_dump也按预期显示了元素,所以问题可能是var_dump被OP系统上的某个扩展覆盖了,或者cakephp弄乱了它。我实际上从未在它上尝试过var_dump。在所有其他情况下,debug()都有效,然后我尝试了print_r(),但从未尝试过第三种方法。谢谢大家,这很有效。仍然不能100%确定为什么print\u r()或debug()在这种情况下不起作用,但很高兴知道。Simplexml有很多魔力,使用
print\u r()
或var\u dump()
永远不会向您展示整个画面。正如所建议的那样,->asXML()
是安全的。很可能debug()
在显示XML结构时也会遇到类似的问题,但如前所述,要显示XML结构,请使用->asXML()
,这样就可以了。例如,如果您想了解为什么打印会以这种方式显示,请阅读将SimpleXMLElement强制转换为数组时会发生什么。
$xml = simplexml_load_string($x); // assume XML in $x
echo $xml->asXML();