कैसे डालें & nbsp; XSLT में


207

मैं कैसे सम्मिलित कर सकता हूँ

 

XSLT स्टाइलशीट में, मुझे यह त्रुटि मिलती रहती है:

XML पार्सिंग त्रुटि: अपरिभाषित इकाई

अनिवार्य रूप से मुझे XSLT टेम्पलेट में एक गैर ब्रेकिंग स्पेस कैरेक्टर चाहिए।


2
आप & # xA0 का उपयोग भी कर सकते हैं; वही & # 160; यहां देखें stackoverflow.com/questions/7511214/…
user3766111

जवाबों:


337

 इसके बजाय इकाई कोड का उपयोग करें ।

 एक HTML "चरित्र इकाई संदर्भ" है। XML में गैर-ब्रेकिंग स्पेस के लिए कोई नामांकित इकाई नहीं है, इसलिए आप कोड का उपयोग करते हैं  

विकिपीडिया में XML और HTML संस्थाओं की एक सूची शामिल है , और आप देख सकते हैं कि XML में केवल 5 "पूर्वनिर्धारित संस्थाएँ" हैं, लेकिन HTML में 200 से अधिक हैं। मैं XSL में एक स्थान (& nbsp;) बनाने की ओर भी इशारा करूँगा जिसमें है शानदार जवाब।


3
हम हाल ही में एक ऐसी स्थिति में आ गए, जहां कई XSL में से एक ने इस तकनीक के साथ काम करना बंद कर दिया, और एक अजीब चरित्र दिखाना शुरू कर दिया। हालांकि, अगर मैं वाटरसोल की सीडीएटीए तकनीक का उपयोग करता हूं तो यह काम करता है।

@BrianReindel, इसका मतलब है कि आपने गलत संख्यात्मक इकाई संदर्भ का उपयोग किया है, अर्थात Šइसके बजाय  , बाद वाला जो हमेशा एक यूनिकोड गैर-ब्रेकिंग स्पेस को हल करेगा।
हाबिल

लिंक टॉप टेन जावा और एक्सएसएलटी टिप्स वास्तव में उपयोगी है।
LCJ

<xsl: पाठ> & # 160; </ xsl: पाठ> यह दो क्षेत्रों को अलग करता है
Manash Ranjan Dakua

1
लिंक सड़ गया है।
GSerg

37

&#160;वास्तव में अच्छी तरह से काम करता है। हालांकि, यह एएनएसआई एन्कोडिंग में उन अजीब पात्रों में से एक को प्रदर्शित करेगा। <xsl:text>मेरे लिए सबसे अच्छा काम किया।

<xsl:text> </xsl:text>

3
स्वीकृत उत्तर का उपयोग करके मैंने अपने XML आउटपुट में एक लाइन ब्रेकिंग स्पेस के साथ समाप्त किया (कम से कम यह ऐसा है जो वीएस2010 के एक्सएमएल संपादक में दिखता है)। इस उत्तर का उपयोग करके मुझे केवल 1 स्थान मिलता है।
मैथिज फ्लिस्त्रा

1
@ मैथिज्ज़, यह एक स्पेस है, नॉन-ब्रेकिंग स्पेस नहीं है, जो समान नहीं है। यदि वीएस इसे गलत तरीके से दिखाता है, तो अपने एन्कोडिंग की जांच करें (वीएस इसे सही ढंग से दिखाने में पूरी तरह से सक्षम है और इसे स्वतंत्र रूप से एन्कोडिंग होना चाहिए, इसलिए अधिक संभावना है कि आप कुछ और गलत कर रहे थे)।
हाबिल

25

एक भी ऐसा कर सकता है:

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

2
यह काम करेगा अगर प्रोसेसर समर्थन करता हैdisable-output-escaping , जिसे इसकी आवश्यकता नहीं है और इसे एक्सएसएलटी 2.0 में और अधिक 3.0 में चित्रित किया गया था। इन संस्करणों में आप xsl:character-mapक्रॉस-प्रोसेसर काम करने की गारंटी के साथ समान प्रभाव तक पहुंच सकते हैं । इसके अलावा, यह &nbsp;आउटपुट में एक नामित इकाई रखता है , जो जरूरी नहीं कि एक गैर-ब्रेकिंग स्पेस के समान हो और प्राप्त करने वाले छोर पर इस इकाई को घोषित किया जाना चाहिए (HTML में यह आमतौर पर निहित है)।
हाबिल

21

इसे इस्तेमाल करो

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

संपादित करें: डाउनवोटर्स को संभवतः यह सत्यापित करना चाहिए कि यह पहले काम करता है (यह करता है, और समस्या का सबसे सामान्य समाधान है।)


1
यकीन नहीं है, लेकिन मैंने अपने दृष्टिकोण का परीक्षण किया है और यह काम करता है, इसलिए मैं निश्चित नहीं हूं कि नीचे क्या है :(
jagprinderdeep

2
इसके अलावा, स्वीकृत उत्तर लिंक्ड पेज के अनुसार सभी पार्सर्स के लिए मान्य नहीं होगा; सिर्फ एक सिर
jagprinderdeep

1
मैंने पहले अपने डाउनवोट का कारण दिया है, लेकिन अगर मैं इस उत्तर को डाउनवोट करूंगा, तो इसका कारण होगा - यह गलत प्रश्न का उत्तर देता है। ओपी ने स्पष्ट रूप से कहा कि कैसे गैर-अटूट स्थान में रखा जाए, xslt का उपयोग किया जाए और आपने उत्तर दिया कि कैसे एम्परसेंड-nbsp-अर्धविराम अनुक्रम को रखा जाए। और नीचे की ओर झगड़ना भी अनावश्यक है। लेकिन गंभीरता से, क्या आपने कभी सीडीएटीए के बारे में ऐसा नहीं कहा है?
माइकल क्रेलिन -

1
ठीक है, jagprinderdeep, मैंने अपना डाउनवोट निरस्त कर दिया, लेकिन बदले में कृपया मुझे मानसिक शरण में जाने के लिए जाएँ। (ध्यान दें कि मैं आपको उस नए कारण के लिए वापस नहीं देता हूं)। लेकिन यह समझें कि आप गलत प्रश्न का उत्तर देते हैं। मुझे लगता है कि अन्य गिरावट के पीछे यही कारण था।
माइकल क्रेलिन -

8
मैंने भी अस्वीकार कर दिया है क्योंकि आप प्राप्त करने की गारंटी नहीं दे सकते हैं कि घोषणा और nbsp; यदि आप xslt + html के साथ काम कर रहे हैं, तो हाँ, यह ऐसा करने का एक तरीका है, यद्यपि एक हैक। लेकिन, यदि आप अन्य xml उत्पन्न करने के लिए xslt का उपयोग कर रहे हैं, तो यह बस आप पर उड़ जाएगा।
डग

14

आप फ़ाइल की शुरुआत में इस इकाई के लिए परिभाषा जोड़ना चाहते हैं (xml घोषणा के नीचे):

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

इसके अलावा आप और अधिक संस्थाओं को जोड़ सकते हैं जैसे कि Ntilde, Aacute, आदि।


5

विजेता ह्यूगो के उत्तर के अलावा , XSLT फ़ाइल में सभी ज्ञात वर्ण संदर्भ कानूनी रूप से प्राप्त करना संभव है, जैसे:

<!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>&amp; &nbsp; &ndash;</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, इकाइयाँ, जावा, Xalan ... देखें


1
ध्यान दें कि हाल ही में, W3 ने स्वचालित प्रक्रिया से आने पर उन और इसी तरह के लिंक के लिए कई अनुरोधों को ब्लॉक करना शुरू कर दिया था। उस फ़ाइल को स्थानीय रूप से या अपने सर्वर पर रखें और उसके अनुसार URL को समायोजित करें और आपको ठीक होना चाहिए। इसके अलावा, HTML नाम की संस्थाओं का उपयोग करने के लिए +1 और उत्कृष्ट समाधान।
हाबिल

एक अच्छा नोट, और इकाई परिभाषाओं के साथ फ़ाइल की एक स्थानीय प्रतिलिपि होने का एक अन्य कारण भी है, अन्यथा अगर इंटरनेट कनेक्शन उपलब्ध नहीं है तो XSLT प्रक्रिया विफल होने की संभावना है। जावा दुनिया में URL को हैक करने की कोई आवश्यकता नहीं है, क्योंकि इसमें EntityResolver की व्यवस्था करना संभव है , और Apache XML Commons Resolver एक अच्छा उम्मीदवार हो सकता है। अन्य प्रोग्रामिंग प्लेटफार्मों में भी इसी तरह की तकनीक होने की संभावना है ...
सेर्गेई उशाकोव

हाँ, इसलिए संदर्भ के लिए, डॉटनेटर्स के लिए: बाहरी संसाधनों को लोड करने के लिए संस्थाओं और XmlResolver के लिए ResolveEntity सार विधि , जो इन जावा विधियों के लिए .NET समकक्ष हैं
हाबिल

2

जब आप निम्नलिखित का उपयोग करते हैं (बिना disable-output-escaping!) आपको एक एकल गैर-ब्रेकिंग स्पेस मिलेगा:

<xsl:text>&#160;</xsl:text>


4
आप की जरूरत नहीं है disable-output-escapingइस के लिए
इयान रॉबर्ट्स

2

XSLT स्टाइलशीट को अच्छी तरह से गठित XML होना चाहिए। चूंकि पांच पूर्वनिर्धारित XML संस्थाओं में से "&nbsp;"एक नहीं है , इसलिए इसे सीधे स्टाइलशीट में शामिल नहीं किया जा सकता है। इसलिए आपके समाधान पर वापस आना आपके "&#160;"लिए एक सही प्रतिस्थापन है जिसका "&nbsp;"आपको उपयोग करना चाहिए।

उदाहरण:

<xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>

0

आप भी उपयोग कर सकते हैं:

<xsl:value-of select="'&amp;nbsp'"/>

& के बाद amp याद रखें या आपको एक त्रुटि संदेश मिलेगा


यह आउटपुट &amp;nbsp;(आपको वहाँ जाने के लिए अर्धविराम का इरादा मानते हुए) होगा, जो &nbsp;कि `` (nb-space) के रूप में प्रस्तुत करेगा ।
हाबिल

0

मैं एक HTML तालिका में एक खाली सेल पर सीमाओं को प्रदर्शित करने की कोशिश कर रहा था। खाली कक्षों में गैर-ब्रेकिंग स्पेस का उपयोग करने की मेरी पुरानी चाल xltlt से काम नहीं कर रही थी। मैंने उसी प्रभाव के साथ लाइन ब्रेक का उपयोग किया। मैं सिर्फ इस बात का उल्लेख करता हूं कि जिस कारण से आप गैर-ब्रेकिंग स्पेस का उपयोग करने की कोशिश कर रहे थे, वह सेल बॉर्डर को चालू करने के लिए 'खाली' टेबल सेल को कुछ सामग्री देना था।

<br/>

मेरे पास एक समान परिदृश्य है, और यह रेंडर करने के लिए टेबल सेल प्राप्त करने में काम आता है।
रिचर्ड मूर

0

उपयोग करने का प्रयास करें

<xsl:text>&#160;</xsl:text>

लेकिन यह आपके द्वारा उपयोग किए जा रहे XSLT प्रोसेसर पर निर्भर करता है: XSLT कल्पना को इसे " &nbsp;" में बदलने के लिए XSLT प्रोसेसर की आवश्यकता नहीं होती है ।


0

हालाँकि उत्तर @brabster और अन्य लोगों द्वारा पहले ही उपलब्ध करा दिया गया है।
मुझे लगता है कि अधिक पुन: प्रयोज्य समाधान होगा:

<xsl:variable name="space">&#160;</xsl:variable>
...
<xsl:value-of select="$space"/>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.