我尝试在 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 引擎
我怀疑这只是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>