在cdata中带有xml的php

时间:2019-03-18 11:24:17

标签: php simplexml cdata

我有一个xml文档,而cdata中有另一个xml文档。我需要读取内部xml,但是该xml具有一些无效的xml字符,例如“&”,这就是为什么将其封闭在cdata中。

一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <outResponse>
         <outReturn>
            <resultData><![CDATA[<?xml version="1.0" encoding="UTF-8"?><DATA><group ID="P12"><FLD NAME="companycode">E173</FLD><FLD NAME="data_link">https://local-services/getkey?&api_key=9999</FLD></group></DATA>]]></resultData>
         </outReturn>
      </outResponse>
   </soapenv:Body>
</soapenv:Envelope>

在此示例中,我需要从companycode fld标签获取值。

我已经使用

尝试过
$myXML = simplexml_load_string($xmlResponse->xpath('//resultData')[0], 'SimpleXMLElement', LIBXML_NOCDATA);

但是它不起作用。所有resultData内容都进行了编码(所有“ <>”和&字符,甚至是来自节点的所有字符),但是为了获取伪装的值,我无法加载结果xml。

我也尝试使用DOMDocument()失败。问题始终是相同的:在cdata中加载xml,这样我就可以获取目标元素的值。

到目前为止,我唯一能够实现此目标的方法是将cdata内容作为字符串使用,并对“&”的“&”值进行查找。然后,我可以加载xml并获取值,但这似乎不是一个好习惯,因为我可能会获得带有其他需要编码的字符的xml。

因此,我需要的是一种在不忽略cdata或命令字的情况下加载xml的方法,而无需忽略自动替换某些字符的需要。

关于如何实现这一目标的任何想法?

谢谢

0 个答案:

没有答案