DOM XML在loadXML上丢失数据

时间:2013-11-17 02:04:19

标签: php xml dom

我需要PHP DOM XML的帮助。

我有这段代码:

$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是来自Web服务的响应。在我尝试将第一个XML响应加载到新的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以便能够解析时,为什么我的数据会消失?

2 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。不确定它是最好的解决方案还是只是一个黑客攻击,但我得到了API响应并将html_decode_entities应用于它并重新输出了xmlns名称空间信息。然后我把它写到了一个文件中。我创建了一个新的DOM文档,并立即从保存的xml文件中重新加载它。然后这一切都奏效了。如果这是一个黑客,并有一个更清洁的方式来完成任务,有人请发布它并告诉我。

答案 1 :(得分: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();