2013-04-18 4 views
0
function loadFilesToArrays(){ 
    $notpromo1Array = simplexml_load_file('pages/hegnar/source/1/notpromo-1_08_04_2013_1.xml'); 
     foreach($notpromo1Array as $xml){ 
      echo $xml -> getName(); 
      echo "<br>"; 
      echo $xml -> ORDREHODE -> SluttkundeNr; 
      echo "<br>"; 
     } 
} 

Мой XML выглядит следующим образомPHP зацикливание корыто ошибка XML

<?xml version="1.0" encoding="UTF-8"?> 
<IS_DATA> 
<ORDRER class="linked-list"> 
    <ORDREHODE> 
     <ORDREKUNDENR>10541</ORDREKUNDENR> 
     <SluttkundeNr>1240</SluttkundeNr> 
        <AND OTHER PROPERTIES></AND OTHER PROPERTIES>.......... 
    </ORDREHODE> 
    <ORDREHODE> 
     <ORDREKUNDENR>10541</ORDREKUNDENR> 
     <SluttkundeNr>1344</SluttkundeNr> 
        <AND OTHER PROPERTIES></AND OTHER PROPERTIES>.......... 
    </ORDREHODE> 
    <ORDREHODE> 
     ETC ETC ETC .................. 
    </ORDREHODE> 
</ORDRER> 
</IS_DATA> 

И в XML правильно закончилась, и т.д., я использовал Notepad ++ 's валидатор XML.

Я не понимаю, почему, когда я вызываю функцию loadFilesToArray, я получаю эту ошибку. Замечание: попытка получить свойство не-объекта в /path/to/file/page1.php в строке 104 IS_DATA в конце фигурные скобки и одинарные кавычки, поскольку я видел много людей, ссылающихся на то, чтобы хотеть эхо-данных из XML, имеющих специальные символы в именах свойств в XML.

+0

'$ xml' уже представляет' ' или даже' '. Также см. [Основные примеры симплексов] (http://php.net/simplexml.examples-basic), которые показывают, что приятно, и [для сообщений об ошибках у нас есть хорошая ссылка здесь на SO] (http: // stackoverflow .com/д/12769982/367456). – hakre

+0

Можете ли вы рассказать мне, что именно находится на линии номер 104? –

+0

@RavindraShekhawat foreach ($ notpromo1Array как $ xml) { – Shogoot

ответ

1

Пожалуйста, дайте правильный путь файла XML прямо сейчас a.xml и test.php как в той же папке

a.xml

<?xml version="1.0" encoding="UTF-8"?> 
<IS_DATA> 
<ORDRER class="linked-list"> 
    <ORDREHODE> 
     <ORDREKUNDENR>10541</ORDREKUNDENR> 
     <SluttkundeNr>1240</SluttkundeNr> 
        <ANDOTHERPROPERTIES></ANDOTHERPROPERTIES> 
    </ORDREHODE> 
    <ORDREHODE> 
     <ORDREKUNDENR>10541</ORDREKUNDENR> 
     <SluttkundeNr>1344</SluttkundeNr> 
        <ANDOTHERPROPERTIES></ANDOTHERPROPERTIES> 
    </ORDREHODE> 
    <ORDREHODE> 
     ETC ETC ETC .................. 
    </ORDREHODE> 
</ORDRER> 
</IS_DATA> 

test.php

<?php 
$notpromo1Array = simplexml_load_file("a.xml"); 
foreach($notpromo1Array as $xml) 
    { 
    foreach($xml as $child) 
    { 
     echo $child->getName(); 
     echo "<br>"; 
     echo $child->SluttkundeNr; 
     echo "<br>"; 
    } 
    } 

/*RESULT 
    * ORDREHODE 
    1240 
    ORDREHODE 
    1344 
    ORDREHODE 
    */ 

?> 
+0

Спасибо за быстрый ответ ... посмотрите мой обновленный вопрос, пожалуйста – Shogoot

+0

Пожалуйста, уточните мой обновленный ответ.Для доступа к этим элементам требуется несколько циклов. –

+1

ofc теперь я вижу и понимаю, каждая для каждой переменной содержит массив. Это решает мою задачу! благодаря! – Shogoot

0

только что сделал быструю проверку и вот что я придумал. Замените Еогеасп код для этого:

foreach($notpromo1Array as $xml){ 
    echo $xml->ORDREHODE->SluttkundeNr; 
    echo "<br />"; 
} 

FYI, я использовал следующий XML-файл в качестве примера и напечатанное 1240:

<?xml version="1.0" encoding="UTF-8"?> 
<IS_DATA> 
    <ORDRER class="linked-list"> 
     <ORDREHODE> 
      <ORDREKUNDENR>10541</ORDREKUNDENR> 
      <SluttkundeNr>1240</SluttkundeNr> 
     </ORDREHODE> 
    </ORDRER> 
</IS_DATA> 
+0

Спасибо за быстрый ответ ... посмотрите на мой обновленный вопрос, пожалуйста, – Shogoot

1

Вам нужно отлаживать код:

foreach ($notpromo1Array as $xml) 
{ 
    echo $xml->getName(), "\n"; 
} 

Это дает вам название элемента, представленного $xml:

ORDRER 

Поскольку у этого элемента нет ни одного <IS_DATA> ребенка, simplexml дает вам NULL. И вы получите доступ к ->ORDRER на NULL, который не работает, как это не объект:

Примечание: Попытка получить свойство необъектных

Это просто. Просто доступ правильные элементы и все в порядке:

foreach ($notpromo1Array as $xml) 
{ 
    echo $xml->getName(), "\n"; 
    echo $xml->ORDREHODE->SluttkundeNr, "\n"; 
} 

Выход:

ORDRER 
1240 
+0

Я сделал, как вы предложили, и ваше право на выходе, странная вещь, хотя моя функция не зацикливается. Посмотрите на мой результат: http://imageshack.us/content_round.php?page=done&l=img94/3492/notlooping.png – Shogoot

+0

Я обновил свой код, чтобы отобразить его фактическое состояние – Shogoot

+0

Вы действительно начинаете с этого, я думаю. Проверьте основные примеры simplexML, которые я связал в комментарии непосредственно по вашему вопросу, у него есть очень приятные примеры, и вы отходите от своего собственного кода, который часто дает лучший взгляд на вещи. Вам нужно указать, какие элементы вы хотите перебрать, например. '$ xml-> ORDERHODE как $ orderhode'. Simplexml не знает, читая ваш мозг;) – hakre

Смежные вопросы