我正在尝试在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:undefined namespace exsl compilation
错误:元素导入xsl:import:无法加载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>
有没有办法解决它?
答案 0 :(得分: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:import:无法加载dateDifference.xsl
此消息表示在当前XSLT文件所在的同一目录中没有名为dateDifference.xsl
的文件(或者该文件存在,但语法无效,或者访问该文件需要权限, ......或者......)