استخدام كيان HTML في XSLT (على سبيل المثال.)

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

  •  09-06-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة لتضمين كيان html في XSLT؟

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>

هذا واحد يعود أ خطأ في XsltParse

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

المحلول

يمكنك استخدام قسم CDATA

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

أو يمكنك وصف &nbsp في DTD المحلي:

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

أو مجرد استخدام &#160; بدلاً من &nbsp;

نصائح أخرى

ومن الممكن أيضًا تمديد النهج من الجزء الثاني إجابة أكو واحصل على جميع مراجع الشخصيات المعروفة المتاحة، مثل هذا:

<!DOCTYPE stylesheet [
  <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
      "http://www.w3.org/2003/entities/2007/w3centities-f.ent">
  %w3centities-f;
]>
...
<xsl:text>&nbsp;&minus;30&deg;</xsl:text>

هناك اختلاف معين في النتيجة بالمقارنة مع <xsl:text disable-output-escaping="yes"> يقترب.هذا الأخير سوف ينتج سلسلة حرفية مثل &nbsp; لجميع أنواع الإخراج، حتى ل <xsl:output method="text">, ، وقد يحدث أن يكون هذا مختلفًا عما قد ترغب فيه ...على العكس من ذلك، الحصول على الكيانات المحددة لقالب XSLT عبر <!DOCTYPE ... <!ENTITY ... ستنتج دائمًا مخرجات متوافقة مع ملفك xsl:output إعدادات.

قد يكون من الحكمة إذن استخدام محلل كيان محلي لمنع محرك XSLT من جلب تعريفات كيانات الأحرف من الإنترنت.قد يحتاج مستخدمو JAXP أو Xalan-J الصريحون إلى تصحيح لـ Xalan-J لاستخدام المحلل بشكل صحيح.انظر مدونتي XSLT، الكيانات، جافا، زالان... لتحميل التصحيح والتعليقات.

هناك احتمال آخر لاستخدام كيانات html من داخل xslt وهو ما يلي:

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

يتعامل XSLT مع الكيانات الأساسية الخمسة فقط بشكل افتراضي: lt, gt, apos, quot, ، و amp.يجب تعريف جميع الآخرين على أنهم @أكو يذكر.

هذا واحد يعود أ خطأ في XsltParse

نعم والسبب في ذلك هو ذلك &nbsp; ليس كيانًا محددًا مسبقًا في XML أو XSLT كما هو الحال في HTML.

يمكنك فقط استخدام حرف Unicode الذي &nbsp; تمثل: &#160;

الآن بعد أن أصبح هناك Unicode، فإن استخدام كيانات الأحرف المسماة يؤدي بشكل عام إلى نتائج عكسية.أوصي باستخدام حرف Unicode لمسافة غير منقسمة بدلاً من الكيان، فقط لهذا السبب.وبدلاً من ذلك، يمكنك استخدام الكيان &#160؛، بدلاً من الكيان المسمى.استخدام الكيانات المسماة يجعل XML الخاص بك يعتمد على DTD مضمن أو خارجي.

لقد وجدت أن كل هذه الحلول أنتجت حرف Â في المساحة الفارغة.

استخدام <xsl:text> </xsl:text> حل المشكلة بالنسبة لي.لكن <xsl:text>#x20;</xsl:text> قد تعمل كذلك.

شكرا لك على معلوماتك.لقد كتبت تدوينة قصيرة بناءً على ما نجح معي أثناء قيامي بإجراء تحويل XSLT في قالب نظام إدارة المحتوى الديناميكي.

تدوينة المدونة هنا: كيفية إضافة كيانات إلى قوالب XSLT.

/ ستين هوجارد

من الضروري استخدام الكيان #x160;

لم يحالفني الحظ في أسلوب DOCTYPE من Aku.

ما نجح بالنسبة لي في تحويلات MSXML على خادم Windows 2003 هو

    <xsl:text disable-output-escaping="yes">&amp;#160;</xsl:text>

نوع من الهجين مما سبق.شكرًا للمساهمين في Stackoverflow!

يجب أن تكون مسافة واحدة بين علامات النص كافية.

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