1

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

红宝石脚本

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 引擎

4

1 回答 1

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>
于 2012-06-21T08:58:18.237 回答