首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >exslt特性在ruby-xslt宝石中不起作用

exslt特性在ruby-xslt宝石中不起作用
EN

Stack Overflow用户
提问于 2012-10-02 13:15:17
回答 1查看 175关注 0票数 2

我有一个Rails应用程序,并使用Bundler管理宝石。我使用ruby进行XSLT转换。gem没有识别exslt特性,比如节点-set()。

下面是我一直在测试的样式表

代码语言:javascript
复制
<xsl:stylesheet version="1.1" 
        xmlns="http://max.gov" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:pre="http://max.gov"
        xmlns:exslt="http://exslt.org/common">
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

        <!--The fabricated xml I want to access with exslt:node-set()-->
        <xsl:variable name="PRE">
                    <root>
                                <item/>
                                <item/>
                    </root>
        </xsl:variable>

        <xsl:template match="/">
                    <results>
                                <run1 name="exslt:node-set($PRE)//pre:item">
                                            <results>
                                            <xsl:for-each select="exslt:node-set($PRE)//pre:item">
                                                        <success position="{position()}"/>
                                            </xsl:for-each>
                                            </results>
                                </run1>
                                <run2 name="exslt:node-set($PRE)//pre:item">
                                            <results>
                                            <xsl:for-each select="exslt:node-set($PRE)//pre:item">
                                                        <success position="{position()}"/>
                                            </xsl:for-each>
                                            </results>
                                </run2>
                    </results>
        </xsl:template>
</xsl:stylesheet>

下面是在我们的应用程序中使用XML::XSLT时得到的输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<results xmlns="http://max.gov" xmlns:pre="http://max.gov" xmlns:exslt="http://exslt.org/common">
   <run1 name="exslt:node-set($PRE)//pre:item">
    <results/>
  </run1>
</results>

(请注意,不仅节点集函数不起作用,元素也跳过了。)代码基本上如下:

代码语言:javascript
复制
xslt = XML::XSLT.new()
xslt.xml = @xml         # @xml string
xslt.xsl = @record.xslt # xslt is stored in db
result = xslt.serve
render :xml => result

这是预期的输出

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
    <results xmlns="http://max.gov" xmlns:pre="http://max.gov" xmlns:exslt="http://exslt.org/common">
       <run1 name="exslt:node-set($PRE)//pre:item">
          <results>
             <success position="1"/>
             <success position="2"/>
          </results>
       </run1>
       <run2 name="exslt:node-set($PRE)//pre:item">
           <results>
             <success position="1"/>
             <success position="2"/>
           </results>
       </run2>
</results>

在执行以下任何一个…时,我都会得到正确的结果

  • 从命令行运行xsltproc
  • 在Rails控制台中运行以下命令 xslt = XML::XSLT.new xslt.xml =File.read(data.xml) xslt.xsl = File.read('test.xsl') xslt.serve

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-31 12:50:18

最后,我们用Nokogiri代替ruby-xslt,这解决了我们的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12690991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档