2013-11-27 3 views
5

मैं एक्सएसएलटी में जांचना चाहता हूं कि कोई HTML फ़ाइल मौजूद है या नहीं। मैं यह कैसे कर सकता हूं? मैंने पहले ही https://gist.github.com/emth/4531924 से फ़ाइल-exist.xsl को आजमाया है लेकिन यह मेरे लिए काम नहीं करता है। मैं इसे 2 घंटे से अधिक समय तक चलाने की कोशिश कर रहा हूं, लेकिन मैं अटक गया हूं। यहाँ मेरी चींटी का टुकड़ा है:मैं एक्सएसएलटी में फ़ाइल अस्तित्व की जांच कैसे कर सकता हूं?

<target name="transform"> 
    <xslt in="/tmp/sample.xml" out="/tmp/out.html" style="/tmp/sample.xsl" /> 
</target> 

और यह मेरा xslt फ़ाइल है:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:java="http://www.java.com/"> 
<xsl:import href="file-exists.xsl"/> 
...  
<xsl:if test="java:file-exists('myfile.html', base-uri())"> 
    <!-- do something here... --> 
</xsl:if> 
.... 

चींटी मैं निम्न त्रुटि मिल जाएगा के साथ इस चल रहा है:

[xslt] Processing /tmp/sample.xml to /tmp/out.html 
[xslt] Loading stylesheet /tmp/sample.xsl 
[xslt] : Error! The first argument to the non-static Java function 'fileExists' is not a valid object reference. 
[xslt] : Error! Cannot convert data-type 'void' to 'boolean'. 
[xslt] : Fatal Error! Could not compile stylesheet 
[xslt] Failed to process /tmp/sample.xml 

कर सकते हैं कोई मुझे एक चल रहा उदाहरण प्रदान करता है या कोई अन्य विकल्प है? धन्यवाद!

+0

मुझे लगता है कि पुस्तकालय फ़ाइल exists.xsl उपयोग XSL उद्योगों 2.0 लेकिन आप संस्करण 1.0 में इसे चलाने http://stackoverflow.com/questions/2917655/how-do-i-check-for-the-existence-of-an-external-file-with-xsl – Sawyer

+0

इससे कोई फर्क नहीं पड़ता कि मैं संस्करण 1.0 या 2.0 का उपयोग करता हूं । मुझे 2.0 – user1613270

उत्तर

5

मैं एक समाधान मिल गया है:

<xsl:when test="fs:exists(fs:new('myfile.html'))" xmlns:fs="java.io.File"> 
    <!-- do something here... --> 
</xsl:when> 

और यह XSLT 1.0 की स्वतंत्र रूप से काम करता है या 2.0

+0

बहुत अच्छी युक्ति। केवल मानक जावा एपीआई के साथ। –

+0

दुर्भाग्यवश प्रत्यक्ष जावा कॉल सैक्सन 9 हे के साथ काम नहीं करते हैं। – Hraban

3

फ़ाइल एक पाठ फ़ाइल है, तो आप XSLT 2.0 फ़ंक्शन का उपयोग कर सकते हैं:

fn:func-unparsed-text-available()

fn: अन-पार्स-पाठ उपलब्ध समारोह निर्धारित करता है कि fn पर एक कॉल: अन-पार्स-पाठ समारोह समान तर्क के साथ एक स्ट्रिंग वापस आ जाएगी। फ़ंक्शन यूआरआई द्वारा पहचाने गए संसाधन को पढ़ने का प्रयास करेगा, और जांच करेगा कि यह सही ढंग से एन्कोड किया गया है और इसमें कोई अमान्य वर्ण नहीं हैं।

यह fn:doc-available() जैसा है जो इसके बजाय XML दस्तावेज़ों पर काम करता है।

+0

के साथ एक ही त्रुटि मिलती है यह वास्तव में एक HTML दस्तावेज़ है जिसे मुझे अस्तित्व की जांच करने की आवश्यकता है – user1613270

+0

हाँ। वह काम करेगा। तो 'fn: func-unparsed-text-available()' का उपयोग करें। –

+0

दुर्भाग्यवश यह मेरे लिए काम नहीं करता है? मुझे त्रुटियां मिलती हैं: त्रुटि! अभिव्यक्ति के प्रकार की जांच करने में त्रुटि 'funcall (func-unparsed-text-available, [literal-expr (myfile.html)])'। घातक त्रुटि! स्टाइलशीट – user1613270

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

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