كيفية تمرير مستند XML كمعلمة لتحويل XSL في Java (Oracle XDK)؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

أحاول تمرير مستند XML إلى ورقة أنماط XSLT كمعلمة. أعتقد أن الكود يستخدم Oracle XDK للتحويلات (يستخدم jdk 1.4.2، وربيع، وأنا جديد في codebase، لذلك لست متأكدا مما يتم تحميله في النهاية). في محاولتي الأولى، قمت فقط بإنشاء كائن مستند وتعيين هذا كمعلمة على المحول، ولكن يحاول نسخ المتغير في الشجرة لا توجد نتيجة. الأسئلة التي تتبادر إلى الذهن هي:

  1. هل هذا ممكن في الحالة العامة لمحولات XSLT؟ (يبدو وكأنه يجب أن يكون، كما يمكن أن تحتوي متغيرات / معلمات XSLT بشكل عام على رنديسيتس)

  2. هل من الممكن خصيصا مع Oracle XDK (أو XALAN، وهو أيضا في Classpath)؟

  3. إذا كان الأمر كذلك، كيف يمكنني عملها؟

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

المحلول

الجواب هو أن هذا ممكن، ومع ذلك، فمن غير بديهية، على الأقل لمعالج أوراكل XSL. حاولت الدعوات التالية (غير العاملة) (تم تغيير الأسماء لحماية الأبرياء):

Document x = createDocumentForMe();
transformer.addParameter("param",x);

و

Document x = createDocumentForMe();
transformer.addParameter("param",new DOMSource(x));

(هذا الثاني على أساس أنه ربما يعمل Domsource لأنه كان java.xml.transform واجهة DOM). كان الاحتجاج الذي عمل لي في النهاية هو أخذ البصيرة التي يستخدمها XSL XPath، وأنواع صالحة للمتغير هي الأوتار أو العصفة بشكل أساسي، وإرجاع xpath العصيدة. ما يلي يعمل بالنسبة لي:

Document x = createDocumentForMe();
XPathExpression xpe = XPathFactory.newInstance().newXPath().compile("/");
transformer.addParameter("param",xpe.evaluate(x, XPathConstants.NODESET));

التي تستخدم أساسا XPath للحصول على Nodeset يحتوي على مستند الجذر فقط من كائن Dom. ومع ذلك، يبدو هذا مثل القليل من الاختراق، وقد لا يعمل مع معالجات XSL الأخرى، لذلك YMMV ...

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