使用 xslt1 在 alt 文本中输出转义

output escaping in alt text with xslt1

在我的来源 XML 中,小于号表示为 &lt;,但在输出(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|&lt;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 确实转义了属性值中的小于号。