Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 为什么XPath在使用not(svg)时选择带有svg子节点的节点_Html_Xml_Xpath_Web Scraping - Fatal编程技术网

Html 为什么XPath在使用not(svg)时选择带有svg子节点的节点

Html 为什么XPath在使用not(svg)时选择带有svg子节点的节点,html,xml,xpath,web-scraping,Html,Xml,Xpath,Web Scraping,我是XPath新手,尝试了一些不同的东西,但有一个查询对我来说真的没有意义 我想选择所有不包含svg子节点的span节点,如下所示: 对我来说,添加[not(svg)]应该会阻止查询选择它正在选择的确切元素,这是一种奇怪的行为还是我很愚蠢?我使用的XPath查询是: //div/a/span[not(svg)] 谢谢 编辑: svg节点的完整XPath是: /html/body/div[1]/div[2]/div/div[1]/div[2]/div[1]/div[1]/a/span[1]/s

我是XPath新手,尝试了一些不同的东西,但有一个查询对我来说真的没有意义

我想选择所有不包含
svg
子节点的
span
节点,如下所示:

对我来说,添加
[not(svg)]
应该会阻止查询选择它正在选择的确切元素,这是一种奇怪的行为还是我很愚蠢?我使用的XPath查询是:

//div/a/span[not(svg)]
谢谢

编辑:

svg节点的完整XPath是:

/html/body/div[1]/div[2]/div/div[1]/div[2]/div[1]/div[1]/a/span[1]/svg
和一段代码:


对于任何一个偶然发现这个问题的人来说,这个问题是由于SVG和HTML名称空间的差异造成的,这在MichealKay评论中的答案中都有介绍

要选择SVG元素,我必须写:

//span/*[name()="svg"]

是的,我认为你的期望是对的。请以其他人可以使用的形式提供您的代码(即,完整的示例,而不是片段,也不是图像),以便人们可以尝试复制。@MichaelKay我在帖子中添加了更多的代码,我希望这样更好,谢谢。您还没有创建一个说明问题的示例。SVG元素通常位于不同的名称空间中。您没有显示添加了
[非(svg)]
的位置。请阅读该链接,并提供一个完整的、最少的、可复制的示例,无需我们猜测您做了什么就可以复制。谢谢。如果您在浏览器中运行,并且这是一个HTMLDOM,那么它可能是一个名称空间问题。请看@kjhughes完整的HTML文档是~25K行,我已经试着删去其中的一部分,它覆盖了我发现这个问题的范围的一小部分,这样更好吗?尽管我认为你和Michael是正确的,因为他们在不同的名称空间中。