繁体   English   中英

在Ruby / Nokogiri中基于XSLT转换XML

[英]Transform XML basing on XSLT in Ruby/Nokogiri

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

有什么办法可以解决?

 <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的文件(或者该文件在那里,但是从语法上来说是无效的,或者访问该文件需要权限,...或, ...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM