2013-11-17 4 views
0

Мне нужна помощь с PHP DOM XML.DOM XML потерять данные на loadXML

У меня есть этот код:

$xmlresponse= file_get_contents("https://webservices.cebroker.com/cebrokerwebservice.asmx/UploadXMLString?InXML=$data"); 
print_r ($xmlresponse); 
echo "<br /> <br />"; 
$xmlFile = new DOMDocument(); 
$works = $xmlFile->loadXML($xmlresponse); 
echo "working = " . $works; 
$searchNode = $xmlFile->getElementsByTagName("licensee"); 
print_r ($xmlFile); 

Это ответ. Первый XML - это ответ веб-службы. XML-файл sencond - это тот, который я получаю после того, как попытаюсь загрузить первый ответ XML в новый объект XML.

<licensees> 
    <licensee valid="true" State="FL" licensee_profession="RN" licensee_number="2676612" state_license_format="" first_name="HENRY" last_name="GEITER" ErrorCode="" Message="" TimeStamp="11/16/2013 8:59:16 PM" /> 
    <licensee valid="true" State="FL" licensee_profession="PN" licensee_number="1063421" state_license_format="" first_name="HENRY" last_name="GEITER" ErrorCode="" Message="" TimeStamp="11/16/2013 8:59:16 PM" /> 
</licensees> 

working = 1 

DOMDocument Object ([doctype] => [implementation] => (object value omitted) [documentElement] => (object value omitted) [actualEncoding] => utf-8 [encoding] => utf-8 [xmlEncoding] => utf-8 [standalone] => 1 [xmlStandalone] => 1 [version] => 1.0 [xmlVersion] => 1.0 [strictErrorChecking] => 1 [documentURI] => /home/content/14/6722114/html/CCRN411/inc/ [config] => [formatOutput] => [validateOnParse] => [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => [nodeName] => #document [nodeValue] => [nodeType] => 9 [parentNode] => [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => /home/content/14/6722114/html/CCRN411/inc/ [textContent] =>) 

Почему мои данные исчезают, когда я пытаюсь загрузитьXML для анализа?

+0

Кстати, когда я скопировать и вставить информацию xmlresponse в строку в файле PHP, результаты совершенны. Итак, мой вопрос заключается в том, почему loadXML не конвертирует xmlresponse в действительный объект XML, но если я использую эту информацию как литеральную строку и пытаюсь загрузитьXML, она работает нормально? –

+0

Дополнительная информация. если я добавлю в файл php следующее: 'code' $ xmlFile = new DOMDocument; $ works = $ xmlFile-> loadXML ($ xmlresponse); $ filename3 = "testing123responseDOM.xml"; $ xmlFile-> save ($ filename3) или die ("Ошибка"); 'code' Сохраняет файл со следующим кодом: < лицензий > < Код 'Почему я потерял скобки < and > в реальном XML? –

+0

Привет, Генри, пожалуйста, добавьте информацию, отредактировав свой вопрос, гораздо легче читать, в отличие от добавления в качестве комментариев. – michi

ответ

0

Я разрешил проблему. Не уверен, что это лучшее решение или просто взломать, но я получил ответ API и применил html_decode_entities к нему и повторно отображал информацию о пространстве имен xmlns. Затем я написал его в файл. Я создал новый документ DOM и сразу же перезагрузил его из сохраненного xml-файла. Тогда все сработало. Если это взломать и есть более чистый способ выполнить задачу, кто-то, пожалуйста, опубликуйте ее и сообщите мне.

+0

Пример XML, представленный в вопросе, не содержит каких-либо атрибутов пространства имен xmlns - если вы предоставите полный XML, вам будет легче помочь. –

+0

@AlfEaton - Он не отображался, когда я распечатывал его, поэтому я не понимал, что он есть. Я прочитал другие публикации в подобной ситуации и обнаружил, что они также сообщают, что нужно сохранить файл xml и перезагрузить, чтобы он работал. Не уверен, почему он присваивает пространство имен, но он также превратил < and > в $ & lt и $ & gt; –

0

Попробуйте использовать getElementsByTagNameNS, как элемент в пространстве имен:

<?php 

$xml = <<<END 
<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://example.com/CEBrokerWebService/"> 
    <licensees> 
     <licensee valid="true" State="FL" licensee_profession="RN" licensee_number="2676612" state_license_format="" first_name="HENRY" last_name="GEITER" ErrorCode="" Message="" TimeStamp="11/16/2013 8:59:16 PM" /> 
     <licensee valid="true" State="FL" licensee_profession="PN" licensee_number="1063421" state_license_format="" first_name="HENRY" last_name="GEITER" ErrorCode="" Message="" TimeStamp="11/16/2013 8:59:16 PM" /> 
    </licensees> 
</string> 
END; 


$doc = new DOMDocument(); 
$doc->loadXML($xml); 

$nodes = $doc->getElementsByTagNameNS('http://example.com/CEBrokerWebService/', 'licensee'); 
printf("Found %d nodes\n", $nodes->length); 

print $doc->saveXML(); 
+0

Когда XML возвращается, он по какой-то причине удаляет скобки начального угла, отображая полученную строку, недействительную XML. –

+0

Вышеприведенный код отлично работает - может быть, опубликовать фактический код, который вы используете, а также фактический входной XML и выходной XML, который вы видите? –

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