【问题标题】:How to escape special characters when transforming html to text using xsl?使用xsl将html转换为文本时如何转义特殊字符?
【发布时间】:2011-08-17 04:51:11
【问题描述】:

示例 html:

<html>
<head>
    <title>My Headline</title>
    <meta name="targetUrl" value="xyz.html?sym=abc"/>
    <meta name="summary" value="A & B"/>
</head>
    <body>
        abc abc, pqr, xyz, rst tsd, prrrr, qqqqqqq, oooooo, opop opop, rtrttrt rtrtrtrt
    </body>
</html>

这只是一个示例 html,它可能是任何随机的特殊字符,我无法访问 html。 我尝试使用以下 xsl 但它不起作用

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
<xsl:strip-space elements="xsl:text"/>
<xsl:variable name="delimiter" select="'|'"/>
<xsl:variable name="fieldNames" select="'yes'"/>
        <xsl:template match="/">
                <xsl:if test="$fieldNames = 'yes'">
                        <xsl:text>title</xsl:text>
                        <xsl:value-of select="$delimiter"/>
                        <xsl:text>targetURL</xsl:text>
                        <xsl:value-of select="$delimiter"/>
                        <xsl:text>summary-r</xsl:text>
                        <xsl:value-of select="$delimiter"/>
                        <xsl:text>body</xsl:text>
                        <xsl:text>&#xA;</xsl:text>
                </xsl:if>
                <xsl:value-of select="normalize-space(html/head/title)" disable-output-escaping="yes" />
                <xsl:value-of select="$delimiter"/>
                <xsl:value-of select="html/head/meta[@name='targetURL']/@value" disable-output-escaping="yes" />
                <xsl:value-of select="$delimiter"/>
                <xsl:value-of select="html/head/meta[@name='summary-r']/@value" disable-output-escaping="yes" />
                <xsl:value-of select="$delimiter"/>
                <xsl:value-of select="normalize-space(html/body)" disable-output-escaping="yes" />
        </xsl:template>
</xsl:stylesheet>

感谢任何帮助。

【问题讨论】:

  • @Alejandro 我在 shell 脚本中尝试这一切,因为我需要将这些 html 迁移到 csv 并执行一些逻辑,我尝试使用 perl 脚本转换为有效的 xml 格式,但还没有运气。我的问题是:有没有一种方法可以通过具有特殊字符的 xsl 直接将 html/XML 转换为 csv/text?
  • 正如我之前写给您的,您的输入文档不是格式良好的 XML 文档(因为这些字符)。您需要一个 HTML 解析器,它可以构建一个您的 XSLT 处理器可以用作输入树的 DOM。因此,您应该询问哪些 HTML 解析器适用于您的环境。

标签: xml xslt special-characters


【解决方案1】:

XSLT 仅适用于 XML 输入,而不适用于 HTML。因此,在进行 XSLT 转换之前,您需要先运行 HTML 到 XML 的转换。有很多工具可以做到这一点,例如John Cowan 的 TagSoup。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2019-05-09
    • 2011-04-22
    相关资源
    最近更新 更多