-1

我有一个简单的 xslt,可以将 xml 转换为 xsl-fo,但是当我的 xml 生成时,它会在

•

当我使用我的转换转换为 xsl-fo 并将其传递给 ecrion 以呈现 pdf 时,它无法识别项目符号点的 html 代码我想向我的 XSLT 添加一些条件以将其更改为一个完整的黑色圆圈项目符号点请有任何建议

 <?xml version="1.0"?>
 <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/doc">
<Generic><xsl:apply-templates /></Generic>
</xsl:template>

<xsl:template match="*|@*">
<xsl:copy>
  <xsl:apply-templates select="@*" />
  <xsl:apply-templates />
</xsl:copy>
</xsl:template>

<xsl:template match="&#149;">
<xsl:copy>
  <xsl:apply-templates select="•" />
  <xsl:apply-templates />
 </xsl:copy>
</xsl:template>
</xsl:transform>
4

2 回答 2

1

在没有看到您的 XML 输入和预期输出的情况下,我们只能猜测。尝试一下:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="/doc">
    <Generic>
        <xsl:apply-templates />
    </Generic>
</xsl:template>

<xsl:template match="text()">
    <xsl:value-of select="translate(., '&#149;', '&#8226;')" />
</xsl:template>

</xsl:stylesheet>

这会将所有出现的 MESSAGE WAITING 控制字符 (•) 替换为 BULLET 字符 (•)。

于 2019-03-15T12:04:19.003 回答
0

您的源代码采用“Windows-1252”编码(或类似的 Windows“代码页”)。参见例如https://superuser.com/questions/1164809/whats-is-the-different-beween-western-european-windows-1252-and-ansi-encoding#1164814https://en.wikipedia。它所指的 org/wiki/Windows-1252 。

您将不需要text()模板,translate()如果您可以执行以下操作之一:

  • 以 UTF-8(或 UTF-16)而不是 Windows-1252 生成 XML
  • 在文档开头生成或修改 XML 声明,以便将编码标识为 Windows-1252(并使用理解 Windows-1252 的 XML 处理器)
  • 使用 XSLT 处理器,例如xsltproc允许您指定输入文档的编码
  • iconv使用( https://en.wikipedia.org/wiki/Iconv ) 或类似方法将您的 Windows-1252 XML 转换为 UTF-8 (并且,转换后,删除或修改 XML 声明,如果它确实识别了编码为 Windows-1252)
于 2019-03-22T11:11:59.613 回答