2012-12-27 24 views
5

यह xml फ़ाइल है। "श्रेणीनाम" तत्व में रिक्त स्थान और कैरिज वापसी का इरादा है।xsl: स्ट्रिप-स्पेस कैरिज रिटर्न को हटा नहीं रहा है

<?xml version="1.0" encoding="utf-8"?> 
<group> 
    <item> 
     <id>item 1</id> 
     <CategoryName> 


     </CategoryName> 
    </item> 
    <item> 
     <id>item 2</id> 
     <CategoryName></CategoryName> 
    </item> 
    <item> 
     <id>item 3</id> 
     <CategoryName>  </CategoryName> 
    </item> 

</group> 

उपरोक्त XML फ़ाइल के लिए XSLT फ़ाइल निम्न है। ऐसा करने का अनुमान है कि यह "श्रेणी नाम" तत्व में सभी रिक्त स्थान को साफ़ कर देगा। फिर, यह जांच करेगा कि "श्रेणी नाम" खाली है या नहीं।

<?xml version="1.0" encoding="utf-8"?> 
<!-- DWXMLSource="testempty.xml" --> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 

    <xsl:strip-space elements="*" /> <!--HERE IS STRIP SPACE--> 


    <xsl:template match="/"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>Untitled Document</title> 
    </head> 

    <body> 
    <xsl:for-each select="/group/item"> 
     <xsl:if test="CategoryName = ''"> <!--HERE IS THE TEST--> 
     <p>Empty</p>   <!--IT WILL OUTPUT 'EMPTY' IF THE ELEMENT IS EMPTY--> 
     </xsl:if> 
    </xsl:for-each> 
    </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

समस्या है, xsl:strip-space अपना काम नहीं कर रही है। केवल आइटम 2 का "श्रेणी नाम" "खाली" परीक्षण पास करता है।

क्या गलत है?

+0

मैं अपने ग्रहण पर इस परीक्षण किया है, यह काम किया जैसा कि आपने उम्मीद की थी। यह प्रिंट 3 "खाली" – Weibo

+0

मैंने उपयोग किया एडोब ड्रीमवेवर और यह केवल एक खाली दिखाता है। – user1535147

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/1134318/xslt-xslstrip-space-does-not-work – K3N

उत्तर

1

स्पष्ट रूप से, डेमवेवर के एक्सएसएलटी प्रोसेसर में एक बग है।

बदलें::

<xsl:if test="CategoryName = ''"> 

साथ:

यहाँ वांछित परिणाम प्राप्त करने के एक और तरीका है

<xsl:if test="not(normalize-space(CategoryName))"> 
+0

वेब खोजने के 2 गंभीर दिनों के बाद .... दिल से धन्यवाद। – user1535147

+0

@ user1535147, आपका स्वागत है। मैं XPath पर एक अच्छी पुस्तक पढ़ने की सलाह देता हूं - अच्छे संसाधनों के लिए यह उत्तर देखें: http://stackoverflow.com/a/341589/36305 –

2

मुझे नहीं पता कि एक्सएसएलटी इंजन ड्रीमवेवर क्या उपयोग कर रहा है, लेकिन यह गलत लगता है।

मुझे लगता है कि कुछ एक्सएसएलटी प्रोसेसर हो सकते हैं जो केवल xsl: स्ट्रिप-स्पेस लागू करते हैं यदि आप उन्हें अनपेक्षित इनपुट (लेक्सिकल एक्सएमएल) के साथ प्रस्तुत करते हैं, और यदि आप उन्हें डोम के साथ प्रस्तुत नहीं करते हैं। इस तरह के व्यवहार को औचित्य देने के लिए कल्पना में कुछ भी नहीं है, लेकिन यह कार्यान्वयनकर्ता के जीवन को बहुत आसान बनाता है।

यह इंगित करने योग्य है कि यह xsl नहीं है: स्ट्रिप-स्पेस का उपयोग करने का इरादा है। इसका उद्देश्य "अनजान" व्हाइटस्पेस को पट्टी करने के लिए किया जाना है, जो व्हाइट-केवल सामग्री में इंडेंटेशन के लिए उपयोग की जाने वाली सफेद जगह है। यदि आप एक्सएसएलटी 2.0 स्कीमा-जागरूक परिवर्तन का उपयोग कर रहे हैं तो यह नियम के रूप में औपचारिक हो जाता है: xsl: स्ट्रिप-स्पेस सरल सामग्री वाले तत्वों की सामग्री को प्रभावित नहीं करेगा। ऐसा इसलिए है क्योंकि इस तरह के तत्व के लिए अलग-अलग रिक्त स्थान तत्व को स्कीमा के विरुद्ध अमान्य बना सकता है।

+0

सहमत हुए! अंतरिक्ष या गाड़ी वापसी सब के बाद शून्य नहीं है! –

+0

तो खाली तत्वों का परीक्षण करने के लिए मैं क्या करूँ? – user1535147

+0

परीक्षण 'सामान्यीकृत-स्थान (एक्सएक्स) का उपयोग करें! =' '' –

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