网站内容抓取软件工具包MetaSeeker自动生成的抓取规则文件是XSLT指令文件,XSLT使用XPath定位和匹配网站内容,如果被抓取的内容中有引号,包括双引号和单引号,使用MetaSeeker的自定义XPath规则时必须要考虑转义问题,因为在XSLT语句中一个XPath表达式的最外层已经使用了双引号,而在XPath表达式内部又用单引号将字符串括起来,也就是说,单引号和双引号都用过了,如果再遇到含有单引号或者双引号的被抓取的内容,必须要转移。有一个很好的例子,抄录如下:
<xsl:template name="captureQuot">
<xsl:param name="processText"/>
<xsl:call-template name="captureSingleQuot">
<xsl:with-param name="processText">
<xsl:call-template name="captureDoubleQuot">
<xsl:with-param name="processText" select="$processText" />
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="captureSingleQuot">
<xsl:param name="processText"/>
<xsl:choose>
<xsl:when test="contains($processText, "'")">
<xsl:value-of select="substring-before($processText,"'")" />
<xsl:text>\'</xsl:text>
<xsl:call-template name="captureSingleQuot">
<xsl:with-param name="processText" select="substring-after($processText,"'")"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$processText"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="captureDoubleQuot">
<xsl:param name="processText"/>
<xsl:choose>
<xsl:when test="contains($processText, '"')">
<xsl:value-of select="substring-before($processText,'"')" />
<xsl:text>\&quot;</xsl:text>
<xsl:call-template name="captureDoubleQuot">
<xsl:with-param name="processText" select="substring-after($processText,'"')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$processText"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
文章评论(0条评论)
登录后参与讨论