2008-10-08 7 views
12

मेरे पास xsl:text नोड में सामग्री के साथ एक एक्सएसएल स्टाइलशीट है:Xsl के साथ newlines व्याख्या: पाठ?

<xsl:text> 
foo 
bar 
baz 
</xsl:text> 

स्टाइलशीट स्वयं "यूनिक्स-शैली" न्यूलाइन लाइन टर्मिनेटर के साथ एक टेक्स्ट फ़ाइल है। मैं विंडोज़ के साथ-साथ यूनिक्स जैसी प्लेटफार्मों पर इस स्टाइलशीट का आह्वान करता हूं। यह अच्छा होगा कि उत्पादन प्लेटफॉर्म के सम्मेलनों के अनुरूप हो जिस पर इसे लागू किया जाता है।

जब मैं विंडोज़ पर इस स्टाइलशीट को चलाता हूं, तो आउटपुट को नोड की सामग्री को छोड़कर सब कुछ के लिए कैरिज रिटर्न/न्यूलाइन जोड़े होता है।

क्या मैं XSLT प्रोसेसर को xsl:text नोड की सामग्री में न्यूलाइन वर्णों का प्लेटफॉर्म विशिष्ट अंत-रेखाओं में अनुवाद करने के लिए निर्देश दे सकता हूं?

अधिक संदर्भ: मैं Apache Ant 1.7.1 XSLT task से स्टाइलशीट का आविष्कार कर रहा हूं:

<xslt in="in.xml" out="out.xml" style="stylesheet.xsl"/> 

स्टाइलशीट हेडर वर्तमान में इस तरह दिखता है:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xalan="http://xml.apache.org/xslt" 
    exclude-result-prefixes="xalan"> 
    <!-- contents elided --> 
</xsl:stylesheet> 

उत्तर

1

इम कैसे सही करने के लिए यकीन नहीं न्यूलाइन स्वचालित रूप से (यह आपके द्वारा उपयोग किए जा रहे एक्सएसएलटी प्रोसेसर पर निर्भर हो सकता है), लेकिन आप अपने टेक्स्ट नोड की सामग्री में न्यूलाइन को मजबूर करने में सक्षम हो सकते हैं। \ r \ n &#xD; &#xA; है, \ n &#xA; है, उदा। आप उपयोग करेंगे:

<xsl:text>foo&#xD;&#xa;bar&#xD;&#xa;</xsl:text> जो आउटपुट आप ढूंढ रहे हैं उसे प्राप्त करने के लिए।

+0

उत्तर के लिए धन्यवाद! हां, मुझे लगता है कि मैं ऐसा कर सकता हूं, लेकिन फिर यूनिक्स जैसी वातावरण में आउटपुट गलत होगा! हार्डकोडिंग के बजाय इसे एक तरफ या दूसरी तरफ, मैं चाहता हूं कि इसे "सही चीज़ करें" चाहे चाहे उसे कहां लगाया जाए। शायद मुझे इस सवाल में स्पष्ट करना चाहिए। एक बार फिर धन्यवाद। –

5

तुम इतनी तरह स्टाइलशीट के लिए एक पैरामीटर निर्धारित कर सकते हैं:

<xsl:param name="br"> 
    <xsl:text>&#10;</xsl:text> 
</xsl:param> 

और अपने चींटी लिपि में एक नेस्टेड परम तत्व का उपयोग करके लाइन चरित्र (ओं) के उचित अंत में गुजरती हैं। इस उदाहरण में डिफ़ॉल्ट रूप से एक यूनिक्स-शैली की नई लाइन होगी। मुझे लगता है कि मूल्य को आउटपुट करना है, आपको इसका उपयोग करना होगा:

<xsl:copy-of select="$br"/> 

यह वर्बोज़ है, लेकिन यह काम करता है।

+0

उत्तर के लिए धन्यवाद! यह एक अच्छा विचार है, लेकिन मुझे नहीं लगता कि xsl: xsl: text के शरीर में प्रतिलिपि बनाई जा सकती है। क्या एक इकाई को इसके बजाय परम के साथ परिभाषित किया जा सकता है? मैं चीजों को एम्बेड कर सकता हूं <, &myeol; के बारे में क्या? यह कैसे किया जाता है? आदर्श रूप से, मैं एक param के माध्यम से ईओएल पारित किए बिना ऐसा करने का एक तरीका चाहूंगा। –

+0

यह xsl के अंदर क्यों होना चाहिए: पाठ? एक पंक्ति में कुछ jsight

4

आप चींटी से बदलने बुला रहे हैं, तो you can test for the OS using a conditional task with a test for the OS family:

<condition property="linebreak" value="&#xD;&#xa;"> 
     <os family="windows"/> 
    </condition> 
    <condition property="linebreak" value="&#xa;"> 
     <os family="unix"/> 
    </condition> 

तो संकेत करने के लिए जो नई पंक्ति चरित्र (रों) आप उपयोग करना चाहते XSLT है कि पैरामीटर गुजरती हैं।

<xsl:param name="br"> 
     <xsl:text>&#xD;&#xa;</xsl:text> 
</xsl:param> 

और फिर लाइन (रों) इन जहां जरूरत की तरह उपयोग करते हुए:

<xslt in="data.xml" out="${out.dir}/out.xml"> 
    <param name="linebreak" expression="${linebreak}" /> 
</xslt> 
0

ठीक है, मैं मेरा (सेक्सन का प्रयोग करके) काम करने के लिए ऊपर 2 विचारों के संयोजन के साथ मिल गया।

<xsl:value-of select="$br" /> 

यहाँ, फिर मेरा पूरा (लेकिन slimline) XSL

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <!--<xsl:strip-space elements="*" />--> 
    <xsl:output method="text" /> 
    <!-- <xsl:preserve-space elements="*"/>--> 
<xsl:param name="br"> 
     <xsl:text>&#xD;&#xa;</xsl:text> 
</xsl:param> 


    <!-- --> 
    <xsl:template match="/"> 


    <xsl:for-each select="//root/Item"> 

     <xsl:value-of select="@Name" /> <!-- Your xpath will vary of course! --> 
     <xsl:value-of select="$br" /> 

    </xsl:for-each> 

</xsl:template> 

है मैं सैक्सन उपयोग कर रहा हूँ % ProgramFiles% \ SaxonHE \ एक विंडोज 7 पर बिन \ Transform.exe एक्स 64 मशीन

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