سؤال

وأنا أحاول تحليل ملف XML، ولكن عندما تحميله simpleXML يطبع التحذير التالي:

تحذير: simplexml_load_file () [function.simplexml حمل ملف]: gpr_545.xml: 55: خطأ محلل: الكيان "Oslash" غير المعرفة في import.php على خط 35

وهذا هو السطر:

<forenames>B&Oslash;IE</forenames><x> </x>

وكما هو تحذيرا، وأنا قد تجاهل ذلك، ولكن أود أن أفهم ما يحدث.

هل كانت مفيدة؟

المحلول

وHTML ترميز الحروف LATIN1 (مثل Ø، ما يصف هذا الحرف) هو الذي كسر محلل XML. إذا كنت في السيطرة على البيانات، تحتاج إلى الهروب باستخدام ترميز الأحرف أسلوب XML (Ø يحدث لمجرد أن يكون & # 216؛)

نصائح أخرى

وHTML-كيانات مثل وOslash ليست هي نفسها كما XML-الكيانات. هنا الجدول للحصول على استبدال HTML-الكيانات لXML-الكيانات.

وواستطيع ان اقول من واحدة من تعليقاتكم إلى وظيفة أخرى، كنت تواجه مشكلة مع / الكيان. أنا لا أعرف إذا كان هذا حتى غير صالح HTML كيان، سوف بلدي فايرفوكس لا تظهر شخصية - ouputs فقط اسم الكيان. ولكنني وجدت جدول البعض لمعظم الكيانات و الرقم المرجعي شخصياتهم. محاولة إضافتها إلى جدول استبدال ويجب أن تكون آمنة. عدد الصورة / المرجع / من جانب الطريق.

وأعتقد أن هذا هو مشكلة الترميز. بي، simplexml في هذه الحالة بالذات، لا يحب O الدنماركية كنت قد حصلت في أن fornames العلامة. قد تتمكن من محاولة لترميز الملف بأكمله في UTF-8 و إزالة النسخة هرب من العلامة بذلك. Aferwards يمكنك أن تقرأ شخصية ملف الحرة نجا تماما في simplexml.

وK

وكان مجرد مشكلة مشابهة جدا وحلها بالطريقة التالية. وكانت الفكرة الرئيسية لتحميل الملف إلى سلسلة استبدال كافة الكيانات سيئة على شيء من هذا القبيل "[[كيان]] Oslash؛" وتنفيذ استبدال العكسي قبل عرض بعض عقدة XML.

function readXML($filename){
    $xml_string = implode("", file($filename));
    $xml_string = str_replace("&", "[[entity]]", $xml_string);
    return simplexml_load_string($xml_string);
}
function xml2str($xml){
    $str = str_replace("[[entity]]", "&", (string)$xml);
    $str = iconv("UTF-8", "WINDOWS-1251", $str);
    return $str;
}
$xml = readXML($filename);
echo xml2str($xml->forenames);

ويكونف ( "UTF-8"، "WINDOWS-1251"، $ شارع) كما قلت "WINDOWS-1251" الترميز على صفحتي

وحاول استخدام هذا السطر:

<forenames><![CDATA[B&Oslash;IE]]></forenames><x> </x>

هذا عن CDATA

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