我有一个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的方法,而无需忽略自动替换某些字符的需要。
关于如何实现这一目标的任何想法?
谢谢