XML 데이터를 구문 분석하기 위해 simplexml_load_string을 사용하고 있습니다. 특정 하위 노드가 누락 된 것처럼 보이는 예외를 제외하고는 모든 것이 잘 진행되고 있습니다. 다음은 원본 XML 출력의 샘플입니다.SimpleXMLElement 객체에 노드가 없습니다.
<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>
LINE 노드를 제외한 모든 항목이 정상적으로로드됩니다. 나는 인 print_r을 할 경우 (간결을위한 참가자 노드로 건너 뛰는)과 같이 표시
[CONTESTANT] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[Name] => Kansas City
[Score] => 0
[RotationNumber] => 109
)
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[Money] => -355.0
[MoneyEnabled] => true
[Points] => -7.5
[Odds] => -115.0
[PointsEnabled] => true
)
)
)
자식 노드의 데이터가 (돈, MoneyEnabled 등)하지만 LINE 노드로 내 아니에요 예상했다. 사실 SimpleXML 객체를 통해이 정보에 액세스 할 수 없었습니다. CakePHP의 디버그 기능을 사용하면 LINE 데이터가 표시되지 않습니다. 저는이 곳에서이 함수를 사용했고 이것은 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'
)
}
)
각 컨테스트 노드 아래에는 LINE 노드가 없습니다.
덕분에 일을 많이들. 여전히 print_r() 또는 debug()가이 1 가지 경우에는 작동하지 않았지만 알아두면 좋은 이유는 아직 100 % 확실하지 않습니다. – JerryAsk
Simplexml에는 많은 마법이 있으며'print_r()'또는'var_dump()'를 사용하면 전체 그림을 보여주지 않습니다. '-> asXML()'이 안전하다는 것이 확실합니다. 'debug()'는 XML 구조를 보여주는 비슷한 문제를 가지고 있지만, 작성된 것처럼 XML 구조를 보여주기 위해서는'-> asXML()'을 사용하면된다. 'print_r'이 그것을 어떻게 표시하는지에 대한 규칙을 배우고 싶다면, ** SimpleXMLElement **를 배열로 캐스팅 할 때 일어나는 일을 읽어보십시오. – hakre