Php SimpleXMLElement对象缺少节点

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"

我使用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" 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();