2013-08-08 7 views
5

का उपयोग कर इस इनपुटकैसे सिर्फ XSL

<?xml version="1.0" encoding="UTF-8"?> <data> 
This is a senstence 
this is another sentence 

<section> 
     <!--comment --><h2>my H2</h2>  <p>some paragraph</p>    <p>another paragraph</p>     
    </section> </data> 

मैं, XSL शैली पत्रक लागू करने के लिए सिर्फ सादा पाठ प्राप्त करने के लिए पंक्ति विराम का सम्मान, और सफेद स्थान पूर्ववर्ती हटाने की जरूरत के साथ सादे पाठ और पंक्ति विराम मिलता है। तो, कुछ नमूनों के लिए ऑनलाइन खोज करने के बाद, मैंने कोशिश की, लेकिन यह मेरे लिए काम नहीं करता है। क्षमा करें, मैं एक्सएसएल से परिचित नहीं हूं और सोचा था कि मैं पूछूंगा।

एक्सएसएल का प्रयास किया, लेकिन यह काम नहीं करता है। कोई विचार?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding="UTF-8"/> 
    <xsl:strip-space elements="*" /> 

     <xsl:template match ="@* | node()"> 
      <xsl:copy> 
       <xsl:apply-templates select="@* | node()"/> 
      </xsl:copy>  
     </xsl:template> 

     <xsl:template match="h1|h2"> 
      <xsl:text> 
      </xsl:text> 
      <xsl:copy> 
       <xsl:apply-templates select="@* | node()"/> 
      </xsl:copy> 
     </xsl:template> 
</xsl:stylesheet> 

एक्सएसएल लागू करने के बाद यह आउटपुट है। जैसा कि आप देख सकते हैं, इसकी सभी एक पंक्ति, कैरिज रिटर्न नहीं।

This is a sentence this is another sentence m H2some paragraphTanother paragraph 

यह वह आउटपुट है जिसे मैं प्राप्त करना चाहता हूं। एच 1 के भीतर पाठ | एच 2 | एच 3 के पहले और बाद में लाइन ब्रेक होना चाहिए।

This is a sentence 
this is another sentence 

my H2 

some paragraph 
another paragraph 
+0

"काम नहीं करता" का क्या अर्थ है? क्या यह एक त्रुटि संदेश दिखाता है? क्या ऐसा कुछ ऐसा करता है जिसे आप नहीं करना चाहते हैं? क्या यह एक मिजेट बाहर निकलता है? – ApplePie

+0

आपके द्वारा पोस्ट किए गए XML इनपुट नमूने के लिए इच्छित सादा पाठ आउटपुट पोस्ट करने पर विचार करें। –

+0

धन्यवाद! मेरा मतलब उन लोगों को भी शामिल करना था। –

उत्तर

4

आप xml:text भीतर गाड़ी वापसी बनाए रखने के लिए एक xml:space="preserve" विशेषता की जरूरत है, और आप से पहले और h1 और h2 टैग की सामग्री के बाद एक गाड़ी वापसी की जरूरत है:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding="UTF-8"/> 
    <xsl:strip-space elements="*" /> 

    <xsl:template match ="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="h1|h2"> 
    <xsl:text xml:space="preserve"> 
</xsl:text> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    <xsl:text xml:space="preserve"> 
</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

प्रारंभिक पाठ (This is a senstence, this is another sentence) मेरे मामले में अलग-अलग लाइनों पर आउटपुट सही है (एक्सएसएलटी निष्पादित करने के लिए विजुअल स्टूडियो 2012 का उपयोग करके)।

आप लिखते हैं कि केवल h टैग गाड़ी वापसी जोड़ा होना चाहिए - अपने नमूना some paragraph में और another paragraphp टैग में हैं, इसलिए कोई कैरिएज रिटर्न जोड़ रहे हैं और वे एक ही लाइन पर उत्पादन कर रहे हैं।

+1

'' स्वचालित रूप से रिक्त स्थान को सुरक्षित रखता है, आपको वहां 'xml: space' की आवश्यकता नहीं है। लेकिन आम तौर पर मैं एक नई लाइन डालने के लिए ' ' का उपयोग करना पसंद करता हूं, जिसका अर्थ है कि मैं सुरक्षित रूप से एक्सएसएलटी फ़ाइल को बिना अर्थशास्त्र को बदलने के पुन: इंडेंट कर सकता हूं। –

+0

@IanRoberts: XSLT को लोड/निष्पादित करने के तरीके पर निर्भर करता है - यह गैर-महत्वपूर्ण सफेद स्थान है और इसलिए यह {xml: space = "संरक्षित" है, तो – MiMo

+0

[spec] (http: //www.w3.org/TR/xslt#strip) कहता है कि '' हमेशा अंतरिक्ष को संरक्षित रखना चाहिए। यदि ऐसा नहीं है तो यह प्रोसेसर में एक बग है। हालांकि, आपके पास एक बिंदु है, यदि प्रोसेसर XSLT पार्सिंग प्रक्रिया के नियंत्रण में नहीं है तो समस्या हो सकती है (उदाहरण के लिए यदि कोई अन्य घटक .xsl फ़ाइल को डीओएम पेड़ में स्थानांतरित कर देता है, तो अंतरिक्ष को छीनने के साथ, फिर हाथों से डीओएम एक्सएसएलटी प्रोसेसर)। –