Php DOM XML在loadXML上丢失数据

Php DOM XML在loadXML上丢失数据,php,xml,dom,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 = $xml

我需要关于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);
$xmlresponse=文件获取内容(“https://webservices.cebroker.com/cebrokerwebservice.asmx/UploadXMLString?InXML=$data”);
打印(xmlresponse);
回声“

”; $xmlFile=new DOMDocument(); $works=$xmlFile->loadXML($xmlresponse); echo“working=”$作品 $searchNode=$xmlFile->getElementsByTagName(“被许可方”); 打印文件($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] => ) 

工作=1
DOMDocument对象([doctype]=>[implementation]=>(省略对象值)[documentElement]=>(省略对象值)[actualEncoding]=>utf-8[编码]=>utf-8[xmlEncoding]=>utf-8[独立]=>1[xmlStandalone]=>1[version]=>1.0[xmlVersion]=>1.0[严格的错误检查]=>1[documentURI]=>/home/content/14/6722114/html/CCRN411/inc/[config]=>[formatOutput]=>[validateOnParse]=>[resolveExternals]=>[preserveWhiteSpace]=>1[recover]=>[substituteEntities]=>[nodeName]=>\document[nodeValue]=>[nodeType]=>9[parentNode]=>[childNodes]=>[childNodes]=>(省略对象值)[firstChild]=>(省略对象值)[lastChild]=>(对象值省略)[previousSibling]=>[属性]=>[所有者文档]=>[名称空间URI]=>[前缀]=>[本地名称]=>[基本URI]=>/home/content/14/6722114/html/CCRN411/inc/[文本内容]=>)

为什么当我试图加载XML以进行解析时,我的数据会消失?

我已经解决了这个问题。我不确定这是最佳解决方案还是仅仅是一次破解,但我得到了API响应,并对其应用了html_decode_实体,并重新格式化了xmlns名称空间信息。然后我将其写入了一个文件。我创建了一个新的DOM文档并立即重新加载从保存的xml文件中删除它。然后一切正常。如果这是一个黑客行为,并且有更干净的方法来完成任务,请有人发布它并让我知道。

尝试使用
GetElementsByTagnames
,因为元素是命名空间的:

<?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();

结束;
$doc=新的DOMDocument();
$doc->loadXML($xml);
$nodes=$doc->getelementsbytagnames('http://example.com/CEBrokerWebService/","持牌人";;
printf(“找到%d个节点\n”,$nodes->length);
打印$doc->saveXML();

BTW,当我将xmlresponse信息复制并粘贴到php文件中的字符串中时,结果是完美的。因此,我的问题是,为什么loadXML不将xmlresponse转换为有效的XML对象,但是如果我将信息用作文本字符串并尝试加载它,效果会很好?更多信息。如果我将以下内容添加到我的php文件-
code
$xmlFile=new DOMDocument;$works=$xmlFile->loadXML($xmlresponse);$filename3=“testing123responseDOM.xml”;$xmlFile->save($filename3)或die(“错误”);
code
它保存了一个文件,其中包含以下
code
许可证持有人
code
为什么我丢失了实际XML中的括号?嗨,Henry,请通过编辑您的问题来添加信息,与添加为注释相比更容易阅读。问题中提供的示例XML没有任何xmlns命名空间属性tes-如果您提供完整的XML,则会更容易提供帮助。@AlfEaton-打印出来时它没有显示,所以我不知道它在那里。我阅读过其他类似情况的帖子,发现他们也报告必须保存XML文件并重新加载以使其正常工作。不确定为什么它会指定名称空间,但它也将<和>转换为$<和$>返回XML时,出于某种原因,它会删除导致生成的字符串为无效XML的开始尖括号。上面的代码在这里工作得很好-可能会发布您正在使用的实际代码,以及您看到的实际输入XML和输出XML?