У меня есть документ XML с другим документом XML внутри cdata. Мне нужно прочитать внутренний 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 (). Проблема всегда одна и та же: загрузите xml внутри cdata, чтобы я мог получить значение целевого элемента.
Единственный способ, которым я смог достичь этого, - это работать с содержимым cdata как строкой и создавать отыскивание значения "&" для "&". Затем я могу загрузить xml и получить значение, но это не очень хорошая практика, потому что я могу получить xml с другими символами, которые необходимо кодировать.
Так что мне нужен способ загрузки этого xml, не игнорируя cdata или словами порядка, не игнорируя необходимость автоматической замены некоторых символов.
Есть идеи о том, как этого добиться?
спасибо