سؤال

لقد كنت أحاول تحليل هذه الأعلاف. وبعد إذا قمت بالنقر فوق هذا الرابط، فستلاحظ أنه لا يمكن حتى تحليله بشكل صحيح في المتصفح.

على أي حال، لن تسمح لي بخدمة الاستضافة الخاصة بي باستخدام SimpleXml_Load_File، لذلك كنت أستخدم حلقة حليقة للحصول عليها ثم تحميل السلسلة في 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' غير محدد في الكيان")، ثم حاولت استخدام SimpleXMLEMELEMENT بدون حظ (يظهر نفس الخطأ "خطأ المحلل: كيان" نبسب " غير محدد "، إلخ ... بسبب HTML في عنصر واحد).

$xml = new SimpleXMLElement($rawXML);

لذلك سؤالي هو، كيف يمكنني تخطي / تجاهل / إزالة هذا العنصر حتى أتمكن من تحليل بقية البيانات؟


تحرير: بفضل MJV للحل! ... لقد فعلت هذا (للآخرين الذين لديهم نفس المشاكل)

$rawXML = str_replace('<description>','<description><![CDATA[',$rawXML);
$rawXML = str_replace('</description>',']]></description>',$rawXML);
هل كانت مفيدة؟

المحلول

قد تحتاج إلى تقديم خطوة مسبقة التحليل التي ستضيف

<![CDATA[

بعد كلu003Cdescription> بطاقة شعار
و أضف

]]>

قبل كل شيءu003C/description> بطاقة شعار
على وجه التحديد، (انظر استجابة الميدرأ إلى مقتطف PHP المقابل)

<description>blah <br />&nbsp; blah, blah...</description>
should become
<description><![CDATA[blah <br />&nbsp; blah, blah...]]></description>

في هذه الأزياء، سيكون المحتوى الكامل لعنصر "Stription"، بحيث يتم تجاهل إنشاء أي إنشاء HTML (أو حتى XHTML) الموجود في هذا العنصر والمعرضين لإلقاء منطق تحليل XML. سيعتني هذا بالمشكلة التي تذكرها ولكن أيضا العديد من القضايا المشتركة الأخرى.

نصائح أخرى

من المحتمل أنك ستتحتاج إلى معالجة شفرة المصدر بشيء مثل:

$xml = @file_get_contents('http://www.wow-europe.com/realmstatus/index.xml');
if ( $xml ) {
    $xml = preg_replace( '/&nbsp/', '&amp;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);

كنت بحاجة إلى القيام بذلك لكل عنصر يحتوي على بيانات الأحرف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top