XMLの形成が不十分であると解析できません
-
19-09-2019 - |
質問
私は解析しようとしています このフィード. 。そのリンクをクリックすると、ブラウザで正しく解析できないことがわかります。
とにかく、私のホスティングサービスではSimplexml_load_fileを使用することはできませんので、Curlを使用してそれを取得してから、このように文字列をDOMにロードしています。
$dom = new DOMDocument;
$dom->loadXML($rawXML);
if (!$dom) {
echo 'Error while parsing the document';
exit;
}
$xml = simplexml_import_dom($dom);
しかし、エラー( "domdocument :: loadxml()[domdocument.loadxml]:エンティティ 'nbsp'エンティティで定義されていない")を取得し、運がないsimplexmlementを使用してみました(同じエラーを表示します "パーサーエラー:エンティティ 'nbsp' '定義されていない」など...その1つの要素のHTMLのため)。
$xml = new SimpleXMLElement($rawXML);
それで、私の質問は、その要素をスキップ/無視/削除して、残りのデータを解析できるようにするにはどうすればよいですか?
編集:ソリューションをMJVに感謝します!...私はこれをしました(同じ問題がある他の人のために)
$rawXML = str_replace('<description>','<description><![CDATA[',$rawXML);
$rawXML = str_replace('</description>',']]></description>',$rawXML);
解決
追加する前の順位ステップを導入する必要があるかもしれません
<![CDATA[
それぞれの後u003Cdescription>鬼ごっこ
そして追加します
]]>
それぞれの前u003C/description>鬼ごっこ
具体的には、対応するPHPスニペットについてはMederの応答を参照)
<description>blah <br /> blah, blah...</description>
should become
<description><![CDATA[blah <br /> blah, blah...]]></description>
この方法では、「Decription」要素の完全な内容は「脱出」されるため、この要素に含まれており、XML解析ロジックを投げるHTML(またはXHTML)構成は無視されます。これは、あなたが言及した問題だけでなく、他の多くの一般的な問題にも対処します。
他のヒント
おそらく、次のようなものでソースコードを操作する必要があります。
$xml = @file_get_contents('http://www.wow-europe.com/realmstatus/index.xml');
if ( $xml ) {
$xml = preg_replace( '/ /', '&nbsp', $xml );
$xml = new SimpleXMLElement($xml);
var_dump($xml);
}
XMLパーサーAfaikに供給する前に、他の方法をお勧めしたいと思いますが、これが唯一の方法だと思います。
編集:実際に交換できると思います <description>
と <description><![CDATA[
など:
<?php
$xml = @file_get_contents('http://www.wow-europe.com/realmstatus/index.xml');
$xml = preg_replace( '/<description>/', '<description><![CDATA[', $xml );
$xml = preg_replace( '/<\/description>/', ']]></description>', $xml );
$xml = new SimpleXMLElement($xml);
var_dump($xml);
文字データを含む各要素に対してこれを行う必要があります。