3

我正在尝试在 Ruby/Nokogiri 中基于 XSLT 转换 XML。

doc   = Nokogiri::XML(File.read('some_file.xml'))
xslt  = Nokogiri::XSLT(File.read('some_transformer.xslt'))

puts xslt.transform(doc)

但它失败了:

I/O 警告:未能加载外部实体“dateDifference.xsl”

RuntimeError:编译错误:元素样式表

xsl:exclude-result-prefixes : 未定义的命名空间 exsl 编译

错误:元素导入 xsl:导入:无法加载 dateDifference.xsl

可能是由于在我的 some_transform.xslt 文件中使用了外部实体引起的:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:res="rate.fidelio.6.0" xmlns:inv="rtav.fidelio.4.0" xmlns:aravr="ravr.fidelio.2.0" xmlns:aravl="ravl.fidelio.2.0"  xmlns:exslt="http://exslt.org/common" xmlns:date="http://exslt.org/dates-and-times" exclude-result-prefixes="res inv aravr aravl date exsl">    
 <xsl:import href="dateDifference.xsl" />
 ...
 </xsl:stylesheet>

有什么办法可以解决吗?

4

1 回答 1

1
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:res="rate.fidelio.6.0" 
xmlns:inv="rtav.fidelio.4.0" 
xmlns:aravr="ravr.fidelio.2.0" 
xmlns:aravl="ravl.fidelio.2.0"  
xmlns:exslt="http://exslt.org/common" 
xmlns:date="http://exslt.org/dates-and-times" 
exclude-result-prefixes="res inv aravr aravl date exsl">

该错误与错误消息完全相同:

XSLT 处理器抱怨没有"exsl"声明名称空间前缀,但它在exclude-result-prefixes属性中列出。

通过以下方式更正此问题

exclude-result-prefixes="res inv aravr aravl date exslt"

对于第二个问题

错误:元素导入 xsl:导入:无法加载 dateDifference.xsl

此消息表示dateDifference.xsl在当前 XSLT 文件所在的同一目录中没有指定文件(或者该文件存在但在语法上无效,或者需要权限才能访问该文件,...或者,... )

于 2012-09-06T11:54:31.847 回答