2010-10-19 25 views
5

मैं निम्नलिखित XSLTएक्सएसएलटी मेरे hrefs में क्यों दिख रहा है?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
    <xsl:output method="html" omit-xml-declaration="yes" /> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 

      <html> 
      <body> 
      <xsl:for-each select="AdvReqIMailMsg"> 

       <a><xsl:attribute name="href"> 
        http://<xsl:value-of select="BackSideUrl"/>/customerlogin.asp?P=<xsl:value-of select="DynaCalPath"/></xsl:attribute > 
       Login to View History of This Request 
       </a> 
       <br/> 
      </xsl:for-each> 
      </body> 
      </html> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

परिणाम है निम्नलिखित:

<a href="&#xA;     http://dotnet.dynacal.com/customerlogin.asp?P=DEMO8"> 
       Login to View History of This Request 
       </a> 

क्यों &#xA; और सभी खाली स्थानों देखते हैं? मैं एक्सएसएलटी के लिए नया हूं और मेरी Google खोजों ने कुछ भी नहीं बदला है जिसे मैंने समझा। धन्यवाद, शॉन

+0

अच्छा प्रश्न, +1। सबसे कम और सबसे पठनीय समाधान के लिए मेरा जवाब देखें। :) –

+0

वही कारण (लेकिन वास्तव में डुप्लिकेट नहीं): http://stackoverflow.com/questions/848841/c-xslt-transform-adding-xa-and-xd-to-the-output – Lucero

उत्तर

5

&#A; एक एन्कोडेड न्यूलाइन वर्ण है।

यह और रिक्त स्थान आपके एक्सएसएलटी में नई लाइन और रिक्त स्थान से संरक्षित हैं।

1

मैं या तो XSLT अपने आप के साथ वास्तव में परिचित नहीं हूँ, लेकिन सामान्य प्रोग्रामिंग अनुभव से एक अनुमान के रूप में, उत्पादन मैच में

<xsl:attribute name="href">http://<xsl:value-of select="BackSideUrl"/>/customerlogin.asp?P=<xsl:value-of select="DynaCalPath"/></xsl:attribute > 
1

को

<xsl:attribute name="href"> 
        http://<xsl:value-of select="BackSideUrl"/>/customerlogin.asp?P=<xsl:value-of select="DynaCalPath"/></xsl:attribute > 

बदलते स्थानों की संख्या की कोशिश बिल्कुल xslt में http... से पहले रिक्त स्थान की संख्या। उन और नई लाइन को हटाएं, और आपको ठीक होना चाहिए।

2

जब आप टेक्स्ट और तत्व नोड्स मिश्रण करते हैं तो व्हाइटस्पेस संरक्षित होता है।

<xsl:attribute name="href"> 
    <xsl:text>http://</xsl:text> 
    <xsl:value-of select="BackSideUrl"/> 
    <xsl:text>/customerlogin.asp?P=</xsl:text> 
    <xsl:value-of select="DynaCalPath"/> 
</xsl:attribute > 
+0

"व्हाइटस्पेस संरक्षित है जब आप पाठ और तत्व नोड्स मिश्रण करते हैं। " मुझे लगता है कि मुझे पता है कि आपका क्या मतलब है लेकिन मुझे नहीं लगता कि यह कथन लिखित के रूप में सच है। इसके बजाय, व्हाइटस्पेस संरक्षित किया जाता है जब (अन्य समय के साथ) यह गैर-व्हाइटस्पेस टेक्स्ट के साथ एक ही टेक्स्ट नोड में होता है, यानी व्हाइटस्पेस और गैर-व्हाइटस्पेस एक साथ प्रारंभ या अंत टैग हस्तक्षेप किए बिना होते हैं। और उत्तरार्द्ध अक्सर होता है जब आप पाठ और तत्वों को भाई बहन के रूप में मिलाते हैं, लेकिन जरूरी नहीं, और न केवल तब। – LarsH

+0

@ लार्सएच, आप सही हैं, यह एक व्यापक सरलीकरण है।समस्या यह है कि विजुअल स्टूडियो का स्वरूपकर्ता इस मामले में अनदेखा करता है और खुशी से लाइन ब्रेक लगाता है जहां वे वास्तव में महत्वपूर्ण हैं। इसलिए, यदि आप इस नियम का पालन करते हैं कि आप टेक्स्ट और तत्वों को सामग्री के रूप में मिश्रित नहीं करते हैं (यानी, सभी तत्वों को केवल टेक्स्ट या वैकल्पिक व्हाइटस्पेस वाले तत्व होते हैं, लेकिन दोनों नहीं), तो फ़ॉर्मेटर आपके दस्तावेज़ों को तोड़ नहीं देगा। यही कारण है कि मैंने इस सरलीकरण को लिखा - इसे टूटे दस्तावेज़ों से बचने में मदद करनी चाहिए। – Lucero

6

बस का उपयोग करें::

तो एक समाधान खाली स्थान के (के रूप में बार्ट द्वारा दिखाया गया है) के साथ शुरू, या निम्न में से अधिक पठनीय हो सकता है ऐसा करने के लिए करने के लिए से बचने के लिए, क्योंकि यह अच्छी तरह से स्वरूपित हो जाता है
<a href="http://{BackSideUrl}/customerlogin.asp?P={DynaCalPath}"> 
      Login to View History of This Request 
</a> 

यह (एवीटी - विशेषता-मूल्य-टेम्पलेट्स का उपयोग) दोनों छोटे और अधिक पठनीय हैं।

सूचना व्यवहार के लिए कारण, लगभग सभी जवाब में बताई गई विधि, उस गुण href का मूल्य निर्माण किया है (आंशिक रूप से) पाठ नोड कि NL वर्ण से है।

इस तरह के मुद्दों पर एक विशुद्ध मानवीय, मनोवैज्ञानिक घटना से परिणाम हैं: हम स्पष्ट रूप से NL जब भी यह गैर सफेद-अंतरिक्ष से घिरा हुआ है देखते हैं, लेकिन हम NL-अंधे हैं जब भी NL शुरू में या कम से है पाठ के एक ब्लॉक का अंत। एनएल और सीआर जैसे विशेष "अदृश्य" पात्रों के अनुरोध समूहों पर दिखाने के लिए यह किसी भी एक्सएसएलटी/एक्सएमएल आईडीई की उपयोगी सुविधा होगी।

+0

आप सही हैं, शायद यह सबसे अच्छा समाधान है। लेकिन आपने यह नहीं समझाया * क्यों * ऐसा होता है, और यह स्पष्ट रूप से सवाल का हिस्सा था! ;-) – Lucero

+0

@ लुसेरो: अन्य सभी लोगों ने समझाया कि यह क्यों खुश हुआ - मुझे उनकी व्याख्या दोहराने की कोई आवश्यकता नहीं है। :) –

+0

@ लुसेरो: उत्तर में एक संक्षिप्त स्पष्टीकरण जोड़ा गया। –

संबंधित मुद्दे