使用 xslt1 在 alt 文本中输出转义
output escaping in alt text with xslt1
在我的来源 XML 中,小于号表示为 <
,但在输出(html,作为替代文本)中,它表示为 <
符号,这会导致 post 处理出现问题。
我在这个命令行中使用 saxon655:
java -cp saxon655/saxon.jar com.icl.saxon.StyleSheet test.xml test.xsl
这对我来说真的没有意义。详情如下:
DocBook XML:
<chapter xmlns="http://docbook.org/ns/docbook">
<info><title>The Chapter</title></info>
<para>
<informalequation>
<mediaobject>
<imageobject>
<imagedata fileref="images/g0589.png" />
</imageobject>
<textobject role="tex"><phrase>|z_ s-z_ t|<r</phrase></textobject>
</mediaobject>
</informalequation>
</para>
</chapter>
XSLT。如果您复制它,请更改 docbook 样式表的路径。
<xsl:stylesheet version="1.0"
xmlns:d="http://docbook.org/ns/docbook"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="/path/to/docbook/xsl-1.78.1/html/docbook.xsl" />
<xsl:template match="d:mediaobject/d:imageobject/d:imagedata">
<xsl:element name="img">
<xsl:attribute name="alt">
<xsl:value-of select="../../d:textobject[@role='tex']/d:phrase" />
</xsl:attribute>
<xsl:attribute name="src">
<xsl:value-of select="@fileref" />
</xsl:attribute>
</xsl:element>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
以及由此产生的 HTML 部分:
<div class="informalequation">
<div class="mediaobject">
<img alt="|z_ s-z_ t|<r" src="images/g0589.png"></div>
</div>
我是不是做错了什么?
据 W3C HTML 验证器所说,对于 text/html 输出没问题,我创建了一个最小的 HTML 4.01 文档,其中包含您在 http://home.arcor.de/martin.honnen/html/test2015040301.html, 它有内容
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>img alt attribute test</title>
</head>
<body>
<div class="informalequation">
<div class="mediaobject">
<img alt="|z_ s-z_ t|<r" src="images/g0589.png"></div>
</div>
</body>
</html>
验证器说 (http://validator.w3.org/check?uri=http%3A%2F%2Fhome.arcor.de%2Fmartin.honnen%2Fhtml%2Ftest2015040301.html&charset=%28detect+automatically%29&doctype=Inline&group=0) "This document was successfully checked as HTML 4.01 Strict!"。所以我认为 Saxon 正在创建正确的 HTML,我不知道你如何 post 处理 XSLT 转换的结果,但是 HTML 或 SGML 解析器应该可以很好地处理它。
使用 XML 输出 (method="xml"
) Saxon 确实转义了属性值中的小于号。
在我的来源 XML 中,小于号表示为 <
,但在输出(html,作为替代文本)中,它表示为 <
符号,这会导致 post 处理出现问题。
我在这个命令行中使用 saxon655:
java -cp saxon655/saxon.jar com.icl.saxon.StyleSheet test.xml test.xsl
这对我来说真的没有意义。详情如下:
DocBook XML:
<chapter xmlns="http://docbook.org/ns/docbook">
<info><title>The Chapter</title></info>
<para>
<informalequation>
<mediaobject>
<imageobject>
<imagedata fileref="images/g0589.png" />
</imageobject>
<textobject role="tex"><phrase>|z_ s-z_ t|<r</phrase></textobject>
</mediaobject>
</informalequation>
</para>
</chapter>
XSLT。如果您复制它,请更改 docbook 样式表的路径。
<xsl:stylesheet version="1.0"
xmlns:d="http://docbook.org/ns/docbook"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="/path/to/docbook/xsl-1.78.1/html/docbook.xsl" />
<xsl:template match="d:mediaobject/d:imageobject/d:imagedata">
<xsl:element name="img">
<xsl:attribute name="alt">
<xsl:value-of select="../../d:textobject[@role='tex']/d:phrase" />
</xsl:attribute>
<xsl:attribute name="src">
<xsl:value-of select="@fileref" />
</xsl:attribute>
</xsl:element>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
以及由此产生的 HTML 部分:
<div class="informalequation">
<div class="mediaobject">
<img alt="|z_ s-z_ t|<r" src="images/g0589.png"></div>
</div>
我是不是做错了什么?
据 W3C HTML 验证器所说,对于 text/html 输出没问题,我创建了一个最小的 HTML 4.01 文档,其中包含您在 http://home.arcor.de/martin.honnen/html/test2015040301.html, 它有内容
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>img alt attribute test</title>
</head>
<body>
<div class="informalequation">
<div class="mediaobject">
<img alt="|z_ s-z_ t|<r" src="images/g0589.png"></div>
</div>
</body>
</html>
验证器说 (http://validator.w3.org/check?uri=http%3A%2F%2Fhome.arcor.de%2Fmartin.honnen%2Fhtml%2Ftest2015040301.html&charset=%28detect+automatically%29&doctype=Inline&group=0) "This document was successfully checked as HTML 4.01 Strict!"。所以我认为 Saxon 正在创建正确的 HTML,我不知道你如何 post 处理 XSLT 转换的结果,但是 HTML 或 SGML 解析器应该可以很好地处理它。
使用 XML 输出 (method="xml"
) Saxon 确实转义了属性值中的小于号。