سؤال

ولدي ملف، والتي هي في شكل XML (يتكون فقط من بداية الجذور وعلامات نهاية، والأطفال من الجذر). عناصر النص للأطفال تحتوي على رمز العطف و. في XML لا يجوز أن يكون هذا الرمز من أجل هذه الوثيقة لتكون صالحة، وعندما حاولت معالجة الملف باستخدام DOM API في جاوة ومحلل XML، حصلت على تحليل الأخطاء. لذلك، لقد حل محل ومع &، وأنا معالجة الملف بنجاح: كان لي لاستخراج القيم من عناصر النص في مختلف ملفات النص العادي.

وعندما فتحت هذه الملفات النصية التي تم إنشاؤها حديثا، كنت أتوقع أن نرى &، ولكن كان هناك وبدلا من ذلك. لماذا هذا؟ لقد تخزين النص في ملفات نصية دون أي تمديد (الملف الأصلي بلدي مع تنسيق XML أيضا لم يكن لديهم التمديد. XML)، وأنا لا يكون مجرد وفي نص الملف الجديد، بغض النظر عن كيف فتح الملف: كما النص أو ملف xml (وهذه هي بعض الخيارات في بلدي محرر XML). ماذا يحدث بالضبط؟ هل جافا (؟) تحويل & إلى & تلقائيا؟ أم أن هناك بعض الترميز الافتراضي؟ حسنا، & لتقف على و، وأعتقد أن هناك بعض "غير مرئية" التحويل التلقائي، ولكن أنا في حيرة متى وكيف يحدث هذا. وفيما يلي أمثلة من بلدي الملف الأصلي والملف المستخرج التي أتلقى بعد أن معالجة الملف الأصلي مع جافا:

وهذا هو بلدي ملف "negative.review" في شكل XML:

<review>
<review_text>
I will not wear it as it is too big &amp; looks funny on me. 
</review_text>
</review>

وهذا هو بلدي استخراج ملف "negative_1":

I will not wear it as it is too big & looks funny on me. 

وبالنسبة لي من المهم أن يكون لديك البيانات الأصلية كما هي (دون أن تفعل أي تحويلات / استبدال)، حتى ظننت أنه لا بد لي من معالجة استخراج ملف "negative_1" تحويل الظهر &amp; إلى &. كما ترون، يبدو أنني لم يكن لديك للقيام بذلك. لكنني لا أفهم لماذا :(.

وشكرا لكم مقدما!

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

المحلول

ووالسبب بسيط: ملف XML <م> يحتوي حقا الطابع "&"

وهي ممثلة فقط بشكل مختلف (أي أنه "هرب")، وذلك لأن "&" حقيقية على انها الخاصة الملفات فواصل XML، كما كنت قد رأيت. قراءة القسم المختص في المواصفات XML 1.0: "2.4 الأحرف البيانات وتوصيف" . انها مجرد بضعة أسطر، ولكن هذا ما يفسر هذه القضية تماما.

وXML هو تمثيل من البيانات (!). لا اعتقد انه ما من ملف نصي. مثال:

وتحتاج إلى تخزين السلسلة "17 <20" في ملف XML. في البداية، لا يمكن، لأن "<" محجوز باسم علامة فتح قوس. ولذلك فإن هذا من شأنه أن يكون غير صالح:

<xml>17 < 20</xml>

والحل: يمكنك استخدام حرف الهروب على الطابع الخاص / محفوظة، لمجرد وسائل الحفاظ على صحة الملف:

<xml>17 &lt; 20</xml>

لجميع الأغراض العملية المقتطف أعلاه يحتوي على البيانات التالية (في التمثيل JSON هذا الوقت):

{
  "xml": "17 < 20"
}

وهذا هو السبب في أن ترى "&" الحقيقي في مرحلة ما بعد المعالجة الخاصة بك. قد نجا في بنفس الطريقة، ولكن هذا <م> يعني بقي نفسه في كل وقت.

ويوضح المثال أعلاه أيضا لماذا يجب أن تعامل "&" خصيصا: إنه هو في حد ذاته جزء من آلية الهروب XML. ويمثل ذلك بداية تسلسل هروب، كما هو الحال في "&lt;". ولذلك يجب أن نجا نفسه (مع "&amp;"، مثل كنت قد فعلت).

نصائح أخرى

وسوف أي محلل XML ضمنا ترجمة كيانات مثل &amp;، &lt;، &gt;، إلى الأحرف المقابلة، وذلك كجزء من عملية تحليل الملف.

scroll top