如何在使用xsl将html转换为文本时转义特殊字符?

时间:2011-05-02 18:59:35

标签: xml xslt special-characters

示例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,它可能是任何随机的特殊字符,我无法访问htmls。 我尝试使用以下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>

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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