2010-07-02 6 views
5

ऐसा लगता है कि libxslt XSLT 2.0 का समर्थन नहीं करता है, और xsl:result-documentlibxslt, या xsltproc का उपयोग कर xsl:result-document नकल करने का कोई तरीका है?क्या libxslt में दस्तावेज़ को कई दस्तावेज़ों में विभाजित करने की सुविधा है?

+0

अच्छा उत्पादन होगा प्रश्न (+1)। एक संभावित समाधान के लिए मेरा जवाब देखें। प्रोजेक्ट करता है –

उत्तर

13

हां, exsl:document का उपयोग कर रहा है। एक साधारण उदाहरण:

==== foo.html ==== 
<html> 
    <body> 
    <h1>Hello, world!</h1> 
    <p>Some longwinded text follows.</p> 
    </body> 
</html> 

जब इस तरह चलाएँ:: करते हुए भी

<html> 
    <body> 
    <h1>Hello, world!</h1> 
    <p>Some longwinded text follows.</p> 
    </body> 
</html> 

:

xsltproc foo.xsl foo.html 

stdout को यह निकलेगा

==== foo.xsl ==== 
<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
       xmlns:exsl="http://exslt.org/common" 
       extension-element-prefixes="exsl"> 
    <xsl:output method="html"/> 
    <xsl:template match="/"> 
    <exsl:document href="toc.html" method="html"> 
     <html> 
     <body> 
      <xsl:apply-templates select=".//h1"/> 
     </body> 
     </html> 
    </exsl:document> 
    <xsl:apply-templates/> 
    </xsl:template> 
    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

इनपुट के रूप में इस ले जा इसेपर लिखना 10:

<html><body><h1>Hello, world!</h1></body></html> 
3

libxslt लागू करता है तो EXSLT, तो आप <exsl:document> विस्तार तत्व इस्तेमाल कर सकते हैं।

यदि नहीं, तो आपको अपने स्वयं के एक्सटेंशन फ़ंक्शन लिखना होगा, क्योंकि XSLT 1.0 एकाधिक परिणाम दस्तावेज़ बनाने में सहायता नहीं करता है।

अद्यतन: जैसा कि this comment में पुष्टि हुई है, libxslt EXSLT लागू करता है। बस इसे पकड़ो और <exsl:document> का उपयोग करें।

+0

libxslt; यह libexslt.a में प्रदान किया गया है। –

0

और यहां एक उदाहरण है जो दिखाता है कि एक नोडसेट के रूप में फ़ाइलों की असीमित संख्या बनाने के लिए एक्सटेंशन का उपयोग कैसे किया जाता है। फिर, xsltproc (libxslt)

नमूना XML इनपुट का उपयोग:

<clients> 
    <client id="ACME1" name="ACME Company 1"/> 
    <client id="ACME2" name="ACME Company 2"/> 
    <client id="ACME3" name="ACME Company 3"/> 
</clients> 

नमूना XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
       xmlns:exsl="http://exslt.org/common" 
       extension-element-prefixes="exsl"> 

<xsl:output method="html" indent="yes" encoding="UTF-8" /> 

<xsl:template match="/"> 
    <xsl:for-each select="/clients/client"> 
    <exsl:document href="{@id}.html" method="html"> 
     <html> 
     <body> 
      <h1>Company: <xsl:apply-templates select="@name"/></h1> 
     </body> 
     </html> 
    </exsl:document> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

3 फ़ाइलें ACME1.html, ACME2.html, आदि

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

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