2014-02-14 3 views
0

Я пытаюсь извлечь информацию из XML возврата Эпп сообщения от SIDNSimpleXML не разбор моих Эпп сообщения XML

Но я не abbel, чтобы получить некоторые из переменных из этого сообщения. Мне удается получить код результата и сообщения.

$ domaininfo = XML сообщений, которые можно увидеть по адресу: http://pastebin.com/HbXMkdD3

$xml = new SimpleXMLElement($domeininfo); 
// check result code 
    if (isset($xml->response->result)) 
     { foreach($xml->response->result->attributes() as $name => $value) { 
      if ($name === 'code') 
      { $code = $value; } 
      } 
     } 

if ($code == '1000') 
{ 
    $domeinnaamuitxml = $xml->response->{'resData'}->{'domain:infData'}->{'domain:name'}; 
    $techcuitxml = $xml->response->{'resData'}->{'domain:infData'}->{'domain:contact type="tech"'}; 
    $admincuitxml = $xml->response->{'resData'}->{'domain:infData'}->{'domain:contact type="admin"'}; 
    echo "Domein naam    : $domeinnaamuitxml \n"; 
    echo "Admin C     : $admincuitxml \n"; 
    echo "Tech C     : $techcuitxml \n"; 
} 

Что это, что я делаю неправильно

Это шов, как только есть: - = или "в тег существует проблема

вся помощь, безусловно, Велком

+0

SimpleXML не дружат с пространствами имен элементов. Используйте другой синтаксический анализатор XML, т. Е. DOMDocument. – CBroe

+1

@CBroe Это утверждение просто неправильно. Методы '-> children()' и '-> attributes()' позволяют вам просто использовать пространства имен. – IMSoP

+0

Возможный дубликат [Проблемы с именами простых имен PHP] (http://stackoverflow.com/questions/2098170/php-namespace-simplexml-problems) – IMSoP

ответ

1

использование xpath для выбора элементов с пространств имён simplexml:

$domeinnaamuitxml = (string)$xml->xpath("//domain:name"}[0]; 

Комментарий: Приведенный выше код требует PHP> = 5.4 из-за [0] (массив разыменовании). В старой версии PHP, сделайте следующее:

$domeinnaamuitxml = $xml->xpath("//domain:name"}; 
$domeinnaamuitxml = (string)$domeinnaamuitxml[0]; 

видеть, что это работает: https://eval.in/101915

+0

В то время как полезный инструмент, нет никакой конкретной причины использовать XPath, а не основные аксессоры SimpleXML только потому, что имплементируются пространства имен. Методы '-> children()' и '-> attributes()' являются самым простым способом пересечения пространств имен. – IMSoP

+0

Спасибо, отлично работайте даже для получения атрибутов: -D просто '$ admincuitxml = $ xml-> xpath (" // domain: contact [contains (@type, 'admin')] ");' –

+0

@IMSoP Я нахожу неудобно использовать «children», а затем прокручивать результаты, чтобы найти определенный узел, поэтому я предпочитаю «xpath» – michi