2013-11-27 54 views
5

Bir HTML dosyasının bulunup bulunmadığını XSLT'de kontrol etmek istiyorum. Bunu nasıl yapabilirim? Dosya-exists.xsl dosyasını zaten denedim https://gist.github.com/emth/4531924 ama benim için çalışmıyor. Şu an 2 saatten fazla koşmaya çalışıyorum ama sıkıştım. İşte benim karınca pasajı var:XSLT'de bir dosya varlığını nasıl kontrol edebilirim?

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

ve bu benim xslt dosyasıdır:

[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 

Can: aşağıdaki hatayı alırsınız karınca ile bu Running

<?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> 
.... 

Herkes bana bir örnek veriyor mu yoksa başka bir alternatif var mı? Teşekkürler!

+0

2.0 Ben kütüphane dosya exists.xsl kullanım XSL engin adlı 2.0 düşünüyorsun ama sürüm 1.0 çalıştırmak http://stackoverflow.com/questions/2917655/how-do-i-check-for-the-existence-of-an-external-file-with-xsl – Sawyer

+0

Sürüm 1.0 veya 2.0 kullanıp kullanmam fark etmez . Aynı hatayı 2.0 – user1613270

cevap

5

Bir çözüm bulduk:

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

ve XSLT 1.0 bağımsız çalışır veya

+0

Çok güzel ipucu. sadece standart java API ile. –

+0

Maalesef doğrudan Java çağrıları Saxon 9 HE ile çalışmaz. – Hraban

3

dosya bir metin dosyası ise, XSLT 2.0 işlevini kullanabilirsiniz:

fn:func-unparsed-text-available()

fn: çözümlenmemiş-text-available işlevi belirler olmadığını fn bir çağrı: çözümlenmemiş metin işlevi aynı argümanlar ile bir dize döndürür. İşlev, URI tarafından tanımlanan kaynağı okumaya çalışır ve doğru şekilde kodlandığını ve geçersiz karakterler içermediğini kontrol eder.

Bu, XML belgeleri üzerinde çalışan fn:doc-available()'a benzer.

+0

ile aldım. Bu aslında varlığını kontrol etmem gereken bir HTML belgesidir – user1613270

+0

Yep. Bu çalışacaktır. Yani fn: func-unparsed-text-available() 'işlevini kullanın. –

+0

Maalesef benim için çalışmıyor mu? Hataları alıyorum: Hata! 'Funcall (func-unparsed-text-available, [literal-expr (myfile.html)])' ifadesinin türünün kontrol edilmesi hatası. Önemli Hata! Stil sayfası – user1613270

İlgili konular