2011-08-29 25 views
7

Bộ vi xử lý Saxon cho tôi lỗi bất cứ khi nào tôi có câu lệnh nhập XSLT. Dưới đây là các lỗi:Lỗi Saxon với câu lệnh nhập XSLT

XTSE0165: I/O error reported by XML parser processing file: shared/test.xslt (The system cannot find the path specified): 

Sau đây là cách tài liệu XSLT của tôi trông giống như:

<?xml version='1.0' encoding='UTF-8'?> 

<xsl:stylesheet version='2.0' 
    xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
    xmlns:fn='http://www.w3.org/2005/02/xpath-functions' 
    xmlns:xs='http://www.w3.org/2001/XMLSchema' 
    > 

    <xsl:import href="shared/test.xslt"/> 

... 

mã java My

TransformerFactory transformerFactory = TransformerFactoryImpl.newInstance(); 

transformerFactory.setURIResolver(uriResolver); //my own custom URI resolver 

Transformer transformer = transformerFactory.newTransformer(new StreamSource(xsltInputStream)); //this is where the error occurs when I debug! 

Lớp resolver URI không bao giờ được kích hoạt! Nó chocks lên trên newTransformer() phương pháp trên .... Tôi đã thử XsltCompiler, vv và điều tương tự ... Nếu tôi loại bỏ các báo cáo nhập khẩu, tất cả mọi thứ hoạt động !! Nó không thể tìm thấy tập tin để nhập đó là tốt nhưng đó là lý do tại sao tôi có lớp resolver để giúp nó xác định vị trí các tập tin nhưng nó không bao giờ gây ra các resolver và không tìm tập tin để nhập khẩu!

Làm cách nào để giải quyết vấn đề này?

+0

Làm cách nào để biết URIResolver của bạn không được gọi? Hiển thị mã cho việc triển khai URIResolver của bạn. –

Trả lời

7

Bạn có thể cần phải set the System ID cho StreamSource của XSLT mà bạn đang tải.

Khi bạn tải từ một số StreamSource, nó không biết XSLT của bạn đang sống ở đâu và gặp khó khăn khi xác định cách giải quyết đường dẫn tương đối.

StreamSource source = new StreamSource(xsltInputStream); 
source.setSystemId(PATH_TO_THE_XSLT_FILE_ON_THE_FILESYSTEM_OR_URL); 
Transformer transformer = transformerFactory.newTransformer(source); 
+0

Câu trả lời đúng. xsl: import có thể được thực hiện để làm việc khi không có URI cơ sở nào được cung cấp có URIResolver, nhưng chỉ với khó khăn, vì quy tắc nói nếu bạn có hai import cho cùng một URI tuyệt đối, bạn sẽ lấy lại cùng một module. –

+0

@Mads Hansen, cảm ơn bạn. Điều đó hiệu quả. Tuy nhiên vẫn còn kỳ quặc rằng URIResolver thậm chí không được kích hoạt. – Ayyoudy

+0

nhưng phải làm gì nếu tệp xslt trong tài nguyên dưới dạng tệp jar? Tôi không làm cho nó chạy đúng ... – YaP

Các vấn đề liên quan