使用DOMXPath

时间:2016-11-04 01:02:53

标签: dom domdocument domxpath

我有以下HTML:

<html>
    <head>
        <meta http-equiv="refresh" content="0;URL=http://amazingjokes.com" />
    </head>
</html>

我想找到带有重定向的META,所以我编写了以下XPath查询:

/html/head/meta[@http-equiv="refresh"]

然而,&#39; - &#39;在&#39; http-equiv&#39;导致错误:

  

无效的正则表达式:// html / head / meta [@ http-equiv =&#34; refresh&#34;] /:   字符类中的范围无序

如何正确重写xpath查询以便能够找到元重定向?

我尝试了这个,当我删除&#39; - &#39;从HTML代码和查询的东西按预期工作,但遗憾的是&#39; http-equiv&#39;是一套标准,所以我不能改变它。这个实验告诉我,我非常接近...

1 个答案:

答案 0 :(得分:0)

  

然而,&#39; - &#39;在&#39; http-equiv&#39;导致错误:

     

无效的正则表达式:// html / head / meta [@ http-equiv =&#34; refresh&#34;] /:   字符类中的范围无序

显然,您使用的XPath引擎是错误的。

问题中使用的XPath表达式是一个有效的XPath 1.0表达式,它选择了想要的<meta>元素

这是一个基于XSLT的验证:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="/">
    <xsl:copy-of select="/html/head/meta[@http-equiv='refresh']"/>
  </xsl:template>
</xsl:stylesheet>

当上述转换应用于提供的XML文档时

<html>
    <head>
        <meta http-equiv="refresh" content="0;URL=http://amazingjokes.com" />
    </head>
</html>

评估XPath表达式并输出此评估节点中的选定内容

<meta http-equiv="refresh" content="0;URL=http://amazingjokes.com"/>