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

时间:2015-04-03 16:45:39

标签: xslt xslt-1.0

在我的源XML中,小于号表示为&lt;,但在输出(html,作为alt-text)中,它表示为<符号,这会导致问题后期处理。

我在这个命令行中使用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>

我做错了吗?

1 个答案:

答案 0 :(得分:1)

就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)“此文档已成功检查为HTML 4.01 Strict!”。所以我认为Saxon正在创建正确的HTML,我不知道你如何对XSLT转换的结果进行后处理,但HTML或SGML解析器应该可以正常使用它。

使用XML输出(method="xml"),Saxon确实逃避了少于属性值。