كيفية توليد *الدقيقة* صورة من مستند XML مع حل الكيانات

StackOverflow https://stackoverflow.com/questions/1641944

  •  10-07-2019
  •  | 
  •  

سؤال

بالنظر إلى مستند XML مثل هذا:

 <!DOCTYPE doc SYSTEM 'http://www.blabla.com/mydoc.dtd'>
 <author>john</author>
 <doc>
   <title>&title;</title>
 </doc>  

أردت أن تحليل فوق مستند XML و توليد نسخة منه مع جميع الكيانات حل بالفعل.وذلك نظرا فوق مستند XMl ، محلل يجب الإخراج:

 <!DOCTYPE doc SYSTEM 'http://www.blabla.com/mydoc.dtd'>
 <author>john</author>
 <doc>
   <title>Stack Overflow Madness</title>
 </doc>  

أنا أعلم أنك يمكن تنفيذ org.xml.ساكس.EntityResolver لحل الكيانات ، ولكن ما لا أعرفه هو كيفية توليد نسخة من مستند XML مع كل شيء لا تزال سليمة (باستثناء الشركات التابعة لها).قبل كل شيء, أقصد whitespaces ، dtd في الجزء العلوي من الوثيقة ، التعليقات ، وأية أمور أخرى باستثناء الكيانات التي يجب أن قد تم حلها سابقا.إذا كان هذا غير ممكن ، يرجى اقتراح طريقة على الأقل أن تحافظ على معظم الأشياء (مثلا ، جميع ولكن لا توجد تعليقات).

نلاحظ أيضا أن أنا يقتصر نقية جافا API التي توفرها الشمس, لذلك لا يوجد طرف ثالث المكتبات يمكن استخدامها هنا.

شكرا جزيلا!

تحرير:سبق مستند XML هو نسخة مبسطة من المستند الأصلي.الأصل واحد يتضمن مجموعة معقدة جدا من الكيان القرار باستخدام EntityResolver أهميتها لدي تقلص إلى حد كبير في هذه المسألة.ما أنا مهتم حقا هو كيفية إنتاج نسخة طبق الأصل من مستند XML مع محلل XML يستخدم EntityResolver لحل الكيانات.

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

المحلول

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

<title>Stack Overflow Madness</title>

و

<title >Stack Overflow Madness</title >

لا يمكن تمييزها من منظور XML الجملة ، والشمس موزعي (حق) نعاملهم كما متطابقة.

أعتقد أن الخيارات الخاصة بك القيام استبدال علاج XML كما نص (كما @Wololo يوحي) أو الاسترخاء الاحتياجات الخاصة بك.

بالمناسبة, ربما يمكنك استخدام XmlEntityResolver بشكل مستقل من محلل XML.أو إنشاء فئة أن يفعل الشيء نفسه.وهذا قد يعني أن String.replace... ليس هو الحل, ولكن يجب أن تكون قادرة على تنفيذ مخصص المتوسع أن تتكرر على الشخصيات في شخصية العازلة وتوسيع لهم في ثانية واحدة.

نصائح أخرى

هل من الممكن بالنسبة لك أن تقرأ في قالب xml مثل سلسلة ؟ و مع سلسلة تفعل شيئا مثل

string s = "<title>&title;</title>";
s = s.replace("&title;", "Stack Overflow Madness");
SaveXml(s);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top