【发布时间】: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>
</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