Как мне разобрать эту строку XML с PHP

1

Мне сложно разобрать следующую строку XML. Я получаю многочисленные ошибки при использовании SimpleXMLElement или simplexml_load_string. Я запускаю PHP версию 5.5.20.

<?xmlversion="1.0"encoding="utf-8"?>
<Responsetype="NAK">
<ResponseCode>231</ResponseCode>
<Description>Billingstate/provinceisrequired.</Description>
<Reference>VSTMUAS:060215CJM-12</Reference>
<TransactionID>1433251975406510979</TransactionID>
<ProcessingTime>0.590634</ProcessingTime>
</Response>

Когда я запускаю следующий код:

$xml = simplexml_load_string($myXMLData);
print_r($xml);

Я получаю следующие ошибки:

Warning: simplexml_load_string(): Entity: line 1: parser warning : xmlParsePITarget: invalid name prefix 'xml' in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): <?xmlversion="1.0"encoding="utf-8"?> in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): ^ in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): Entity: line 1: parser error : ParsePI: PI xmlversion space expected in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): <?xmlversion="1.0"encoding="utf-8"?> in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): ^ in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): Entity: line 2: parser error : error parsing attribute name in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): <Responsetype="NAK"> in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): ^ in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): Entity: line 2: parser error : attributes construct error in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): <Responsetype="NAK"> in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): ^ in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): Entity: line 2: parser error : Couldn't find end of Start Tag Responsetype line 2 in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): <Responsetype="NAK"> in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): ^ in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): Entity: line 2: parser error : Extra content at the end of the document in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): <Responsetype="NAK"> in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Warning: simplexml_load_string(): ^ in /home/pmotrad/public_html/content/CalvinsTesting.php on line 18

Пожалуйста, помогите мне понять, что я делаю неправильно.

Благодаря,

Кальвин

  • 0
    Ну, это не выглядит хорошо сформированным. Где находится открывающий тег <Response>?
  • 0
    Я согласен, это не очень хорошо сформировано. Это ответ из внешнего источника, и, к сожалению, я не могу контролировать то, что они мне возвращают. Однако я могу использовать некоторые php-строки, чтобы получить их в правильной форме. Я то, что некоторые называют новичком в XML, поэтому, если кто-то сможет показать мне, какой должна быть форма, я могу внести эти изменения в свой код. Кстати, я добавил <Response> перед своим сообщением, и я не заметил никаких изменений в ошибках, показанных выше, поэтому я не думал, что это проблема.
Показать ещё 1 комментарий
Теги:
xml-parsing

1 ответ

1
Лучший ответ

Строка содержит не совсем отформатированный XML.

Вот ваш XML после его исправления

<?xml version="1.0" encoding="utf-8"?>
<Response type="NAK">
    <ResponseCode>231</ResponseCode>
    <Description>Billingstate/provinceisrequired.</Description>
    <Reference>VSTMUAS:060215CJM-12</Reference>
    <TransactionID>1433251975406510979</TransactionID>
    <ProcessingTime>0.590634</ProcessingTime>
</Response>

Попробуйте этот xml, и вы получите:

 SimpleXMLElement Object ( [@attributes] => Array ( [type] => NAK ) [ResponseCode] => 231 [Description] => Billingstate/provinceisrequired. [Reference] => VSTMUAS:060215CJM-12 [TransactionID] => 1433251975406510979 [ProcessingTime] => 0.590634 )
  • 0
    Это здорово, и это работает, спасибо. Я бы поддержал, если бы у меня была репутация.
  • 0
    У меня есть вопрос для вас. Можете ли вы сказать мне, как получить доступ к значению атрибута <Response> (мне нужно получить " NAK ")?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню