首页 文章

基于Ruby / Nokogiri中的XSLT转换XML

提问于
浏览
2

我试图在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 error:element import 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>

有没有办法解决它?

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:日期= “http://exslt.org/dates-and-times”
    exclude-result-prefixes =“res inv aravr aravl date exsl”>

    错误完全符合错误消息:

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

    Correct this in the following way

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

    For the second problem

    error:element import xsl:import:无法加载dateDifference.xsl

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

相关问题