Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Перебор узлов в XML


Автор: liliputochka 27.1.2010, 16:22
День добрый!
Условия:
1. С помощью DomDocument формирую дерево XML-файла
2. Считываю данные и вывожу на экран

Задача:
XML-файл сформирован след. образом:
Код

...
<MemberMessage>
  <MemberMessageExchange>
   <Item>
     <ItemID>350288728676</ItemID> 
     <Title>NEW TRIMERSION VR FIRST PERSON SHOOTER 3001AD HEADSET</Title> 
   </Item>
   <Question>
     <MessageType>AskSellerQuestion</MessageType> 
     <QuestionType>Payment</QuestionType> 
     <DisplayToPublic>false</DisplayToPublic> 
     <SenderID>legendq8</SenderID> 
     <SenderEmail>[email protected]</SenderEmail> 
     <RecipientID>saferseller</RecipientID> 
     <Subject>legendq8 has sent a question about :payment for item #350288728676, ending on 14-Dec-09 16:47:09 GMT - NEW TRIMERSION VR FIRST PERSON SHOOTER 3001AD HEADSET</Subject> 
     <Body>Hi How r u ? i hope u r fine it work with windows 7 ? its work with full hd moniters ? how many days it will take to get to me in nottingham in england :) im sure i will buy it but i want to make sure that it work with me sorry for asking many question :)</Body> 
     <MessageID>711602432</MessageID> 
   </Question>
   <MessageStatus>Unanswered</MessageStatus> 
   <CreationDate>2009-12-11T17:27:45.000Z</CreationDate> 
   <LastModifiedDate>2009-12-11T17:27:45.000Z</LastModifiedDate> 
  </MemberMessageExchange>
...
</MemberMessage>

Это один узел, а таких у меня в файле много! Надо чтобы считывались все узлы последовательно. Сделала следующее:
Код

$responseDoc = new DomDocument();
$responseDoc->loadXML($stringXml);
for($i =0; $i<10; $i++){
    $memberMessage = $responseDoc->getElementsByTagName('MemberMessageExchange');
        $itemID = $memberMessage->item(0)->getElementsByTagName('ItemID');
        echo $itemID->item(0)->nodeValue;
        $memberMessage->removeChild($itemID);
}


Выдает ошибку на последнюю строчку: "Call to undefined method DOMNodeList::removeChild()". Я понимаю что метод removeChild() объявлен в классе DOMNode. Я не понимаю что мне сделать, чтобы организовать перебор узлов!?
Я уже пробовала так
Код

for($i =0; $i<10; $i++){
     $itemID = $memberMessage->item($i)->getElementsByTagName('ItemID');
     echo $itemID->item($i)->nodeValue;
}

Не работает!
По сути мне не надо возможности создания своего XML файла методами DomDocument, надо только считывать узлы!

Автор: liliputochka 27.1.2010, 18:32
Ок! Я нашла как реализовать перебор всех узлов. У меня появляется ошибка 
Цитата

Notice: Trying to get property of non-object in Z:\home\eBayAPI\www\GetMemberMessages_class.php on line 164

Код данной строки следующий
Код

$senderEmail = $mM->getElementsByTagName("SenderEmail");
$valueSenderEmail = $senderEmail->item(0)->nodeValue;

Вопрос: почему браузер проходит 4 итерации без проблем, а на 5-й выдает выше указанную ошибку? В чем ошибка?
Заметка: дальнейшая работа по выводу данных в браузер работает корректно. Все данные верны.

Добавлено через 6 минут и 55 секунд
Появилась еще следующее сообщение об ошибке
Цитата

Notice: Trying to get property of non-object in Z:\home\eBayAPI\www\GetMemberMessages_class.php on line 155

Код
Код

$itemID = $mM->getElementsByTagName( "ItemID" );
$valueitemID = $itemID->item(0)->nodeValue;

Работает так же как и в предыдущей ошибке.

Автор: liliputochka 29.1.2010, 14:18
Цитата(liliputochka @  27.1.2010,  18:32 Найти цитируемый пост)
Код данной строки следующий

код PHP
1:
2:

$senderEmail = $mM->getElementsByTagName("SenderEmail");
$valueSenderEmail = $senderEmail->item(0)->nodeValue;





Вопрос: почему браузер проходит 4 итерации без проблем, а на 5-й выдает выше указанную ошибку? В чем ошибка?
Заметка: дальнейшая работа по выводу данных в браузер работает корректно. Все данные верны.

Ответ на вопрос очень прост:
В данном случае данные такого типа не поступают!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)