2010-02-24 13 views
6

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

मैं यह समझ सकता हूं कि प्रत्येक बीआर टैग के लिए मुझे इस ऊंचाई को कैसे सम्मिलित करना है, लेकिन मैं केवल एक दूसरे के बाद 2 बीआर टैग होने पर रिक्त रेखा डालना चाहता हूं (अन्यथा प्रत्येक पाठ के बाद एक खाली रेखा डाली जाएगी इसके बाद बीआर टैग।)

मुझे 'बकवास' अभिव्यक्ति (11 से अधिक 10) बनाने के लिए मिला है जो नियमित रूप से डालने के लिए परिभाषित करेगा: ब्लॉक या एक फॉ: ब्लॉक स्पेस-बाद = "1em"। जाहिर है कि इस अभिव्यक्ति का कोई मतलब नहीं है, इसे जांचना चाहिए कि क्या यह बीआर तत्व पंक्ति में दूसरा है। अगर कोई मेरी मदद कर सकता है या मुझे सही दिशा में इंगित कर सकता है, तो इसकी सराहना की जाएगी।

<xsl:template match="html:br"> 
<xsl:choose> 
    <xsl:when test="11 &gt; 10"> 
     <fo:block space-after="1em"> 
      <xsl:call-template name="process-common-attributes"/> 
     </fo:block> 
    </xsl:when> 
    <xsl:otherwise> 
     <fo:block> 
      <xsl:call-template name="process-common-attributes"/> 
     </fo:block> 
    </xsl:otherwise> 
    </xsl:choose> 

संदर्भ के लिए, इस एक्सएचटीएमएल का एक टुकड़ा है, जहां मैं डबल बीआर टैग एक रिक्त पंक्ति में तब्दील किया जा करना चाहते है, लेकिन एकल बीआर टैग: यह है कि मैं क्या अभी है बस एक नियमित लाइन ब्रेक होना चाहिए।

    <div style="color: #000000; font-family: arial; font-size: 10pt; font-style: normal; font-weight: normal;"> 
        <span>description</span> 
        <br/> 
        <span>using</span> 
        <br/> 
        <span>multiple</span> 
        <br/> 
        <span>lines</span> 
        <br/> 
        <br/> 
        <span>with</span> 
        <br/> 
        <br/> 
        <span>blank</span> 
        <br/> 
        <br/> 
        <span>lines</span> 
        <br/> 
       </div> 

उत्तर

4

इसकी लाइनों के साथ कुछ।

मैच में केवल वे <br> रों कि सीधे एक तत्व (following-sibling::*[1]) है कि अपने आप में एक <br> ([self::html:br]) है द्वारा पीछा कर रहे हैं:

<xsl:template match="html:br[following-sibling::*[1][self::html:br]]"> 
    <fo:block space-after="1em" /> 
</xsl:template> 

और करने के लिए उन <br> रों कि सीधे एक <br> से पहले कर रहे हैं दूर फेंक देते हैं, अंतरिक्ष के बाद दोगुनी से बचें। उन्हें एक खाली टेम्पलेट से मिलान करके वे प्रभावी रूप से हटा दिए जाते हैं:

<xsl:template match="html:br[preceding-sibling::*[1][self::html:br]]" /> 
+0

उत्कृष्ट, जो तुरंत काम करता था। धन्यवाद! –

+0

@ बास: आपका स्वागत है। :) अच्छा सवाल, बीटीडब्ल्यू। – Tomalak

0

मैं एकाधिक लाइन ब्रेक के समान विचार के साथ खेल रहा था।

<xsl:template match="html:br"> 
    <fo:block linefeed-treatment="preserve"> 
    <xsl:text>&#10;</xsl:text> 
    </fo:block> 
</xsl:template> 
संबंधित मुद्दे