Nokogiri忽略了XSL转换中的实体

时间:2012-06-21 08:37:33

标签: ruby xslt nokogiri

我尝试在Web应用程序中本地化XSLT模板,我想为此使用实体机制。但是值不会在结果文档中替换。

Ruby脚本

require 'nokogiri'

doc   = Nokogiri::XML(File.read('test.xml'))
xslt  = Nokogiri::XSLT(File.read('test.xsl'))

puts xslt.transform(doc)

XML文档

<?xml version="1.0" encoding="UTF-8" ?>

<CommonCard>
  <Test/>
</CommonCard>

XSLT样式表

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE xsl:stylesheet [
  <!ENTITY labelHello "hello world!">
]>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output encoding="utf-8" method="xml" />

  <xsl:template match="/">
    &labelHello; 123
  </xsl:template>

</xsl:stylesheet>

我想得到这个

<?xml version="1.0" encoding="utf-8"?>
hello world! 123

但现在我明白了

<?xml version="1.0" encoding="utf-8"?>
 123

我做错了什么?

UPD

我使用Nokogiri XML引擎

1 个答案:

答案 0 :(得分:1)

我怀疑这只是Nokogiri的限制。我建议解决方法:使用变量而不是实体,如此......

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="labelHello" select="'hello world!'" />
  <xsl:template match="/">
    <xsl:value-of select="$labelHello" /> 123
  </xsl:template>
</xsl:stylesheet>