网站内容抓取软件工具包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>