سؤال

أحاول تحليل ملف XML باستخدام Vython Expat. لدي السطر التالي في ملف XML الخاص بي:

<Action>&lt;fail/&gt;</Action>

تحدد المغتربين علامات البداية والنهاية ولكنه يحول & lt؛ إلى أقل من الشخصية ونفس الشيء بالنسبة لأكبر من الشخصية، وبالتالي يوضح ذلك مثل هذا:

حصيلة:

START 'Action'
DATA '<'
DATA 'fail/'
DATA '>'
END 'Action'

بدلا من المطلوب:

START 'Action'
DATA '&lt;fail/&gt;'
END 'Action'

أود الحصول على النتيجة المرجوة، كيف يمكنني منع المغتربين من العبث؟

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

المحلول

المغترب لا يفسد، &lt; هو ببساطة ترميز XML للشخصية <. وبعد تماما على العكس، إذا كان المغتربين سيعود الحرفي &lt;, ، سيكون هذا خطأ فيما يتعلق مواصفات XML. التي يقال، يمكنك بالطبع الحصول على الإصدار الهارب مرة أخرى باستخدام xml.sax.saxutils.escape:

>>> from xml.sax.saxutils import escape
>>> escape("<fail/>")
'&lt;fail/&gt;'

محلل EXPAT مجاني أيضا في الإبلاغ عن جميع بيانات السلسلة بأي من قطع يبدو مناسبا، لذلك عليك أن تتسلسل إليهم بنفسك.

نصائح أخرى

كل من محلل SAX و STAX مجانيين في تفكيك السلاسل بأي طريقة مريحة لهم (على الرغم من أن Stax يحتوي على وضع Coalesce لإجباره على تجميع القطع لك).

والسبب هو أنه غالبا ما يكون من الممكن كتابة البرامج في بعض الحالات التي تتدفق ولا يتعين عليها تهتم بنظام إعادة تجميع شظايا السلسلة.

عادة ما كنت تتراكم النص في متغير، واستخدم المحتويات عندما أرى الحدث المجلد التالي أو الحدث المعتاد. في تلك المرحلة، قمت بإعادة تعيين متغير النص المتراكم أيضا.

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