Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
245 views
in Technique[技术] by (71.8m points)

dom - find redirect META in DOMDocument with DOMXPath

I have the following HTML:

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

I want to find the META with the redirect, so I wrote the following XPath query:

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

However, the '-' in 'http-equiv' is causing an error:

Invalid regular expression: //html/head/meta[@http-equiv="refresh"]/: Range out of order in character class

How can I properly rewrite the xpath query to be able to find the meta redirect?

I experimented with this, when I remove the '-' from the HTML code and the query things work as expected, but unfortunately the 'http-equiv' is a set standard, so I can not change that. This experiment showed me I am very close...

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

However, the '-' in 'http-equiv' is causing an error:

Invalid regular expression: //html/head/meta[@http-equiv="refresh"]/: Range out of order in character class

Obviously, the XPath engine you are using is buggy.

The XPath expression used in the question is a valid XPath 1.0 expression and it selects the wanted <meta> element.

Here is an XSLT - based verification:

<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>

When the transformation above is applied on the provided XML document:

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

the XPath expression is evaluated and the selected in this evaluation node is output:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...