如何使用 XSLT 获取项目符号点黑色圆圈而不是 html 代码
How to get a bullet point Black round circle instead of html code using XSLT
我有一个简单的 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="•">
<xsl:copy>
<xsl:apply-templates select="•" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:transform>
没有看到您的 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(., '•', '•')" />
</xsl:template>
</xsl:stylesheet>
这会将所有出现的 MESSAGE WAITING 控制字符 (å) 替换为 BULLET 字符 (•)。
您的来源采用 'Windows-1252' 编码(或类似的 Windows 'code page')。参见,例如,它所指的 https://superuser.com/questions/1164809/whats-is-the-different-beween-western-european-windows-1252-and-ansi-encoding#1164814 and https://en.wikipedia.org/wiki/Windows-1252。
如果可以执行以下操作之一,则不需要 text()
模板和 translate()
:
- 用 UTF-8(或 UTF-16)而不是 Windows-1252
生成你的 XML
- 生成或修改文档开头的 XML 声明,使其将编码标识为 Windows-1252(并使用理解 [=32] 的 XML 处理器=]-1252)
- 使用 XSLT 处理器,例如
xsltproc
,它可以让您指定输入文档的编码
- 使用
iconv
(https://en.wikipedia.org/wiki/Iconv) 或类似方法(以及 post-转换,删除 Windows-1252 XML 转换为 UTF-8或修改 XML 声明,实际上,将编码标识为 Windows-1252)
我有一个简单的 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="•">
<xsl:copy>
<xsl:apply-templates select="•" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:transform>
没有看到您的 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(., '•', '•')" />
</xsl:template>
</xsl:stylesheet>
这会将所有出现的 MESSAGE WAITING 控制字符 (å) 替换为 BULLET 字符 (•)。
您的来源采用 'Windows-1252' 编码(或类似的 Windows 'code page')。参见,例如,它所指的 https://superuser.com/questions/1164809/whats-is-the-different-beween-western-european-windows-1252-and-ansi-encoding#1164814 and https://en.wikipedia.org/wiki/Windows-1252。
如果可以执行以下操作之一,则不需要 text()
模板和 translate()
:
- 用 UTF-8(或 UTF-16)而不是 Windows-1252 生成你的 XML
- 生成或修改文档开头的 XML 声明,使其将编码标识为 Windows-1252(并使用理解 [=32] 的 XML 处理器=]-1252)
- 使用 XSLT 处理器,例如
xsltproc
,它可以让您指定输入文档的编码 - 使用
iconv
(https://en.wikipedia.org/wiki/Iconv) 或类似方法(以及 post-转换,删除 Windows-1252 XML 转换为 UTF-8或修改 XML 声明,实际上,将编码标识为 Windows-1252)