Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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
Python lxmlxpath//和//差异_Python_Xml_Xpath_Lxml - Fatal编程技术网

Python lxmlxpath//和//差异

Python lxmlxpath//和//差异,python,xml,xpath,lxml,Python,Xml,Xpath,Lxml,在这种情况下//和//的区别是什么。有点困惑 问题2: >>> response_zone.xpath("//zones-information/zones-security[//zones-security-interface-name[text()='reth2.66']]/zones-security-zonename/text()") ['A', 'B', 'C'] >>> >>> response_zon

在这种情况下//和//的区别是什么。有点困惑

问题2:

 >>> response_zone.xpath("//zones-information/zones-security[//zones-security-interface-name[text()='reth2.66']]/zones-security-zonename/text()")
    ['A', 'B', 'C']
    >>> 
    >>> response_zone.xpath("//zones-information/zones-security[.//zones-security-interface-name[text()='reth2.66']]/zones-security-zonename/text()")
    ['A']
在问题2中,他们有相同的结果

我对此感到困惑。需要帮助。

请阅读xPath=)

-s是
self::node()的缩写
,当前节点的参考

/
-是
/genderant或self::node()/
的缩写,在所有层上的所有节点内搜索

/
-从所有层上的当前节点进行搜索

/
从下面的当前节点1层搜索

所以当您这样做时:

//某物[.//另一个]
-
某物
,在任何层中都有
另一个

//某物[./另一个]
-
某物
,其子对象为
另一个

//something[//other]
-
something
,但文件
中的某个地方另一个
也应该是[不仅在
something
内部,而且在任何地方]

//something//另一个
-
另一个
,在任何层上都有
某个
作为父对象

//something/other
-
something
直接父对象
other

//某些内容//另一个
-错误,由于语法不正确,请仅使用
//


当您仅使用
/
/
启动定位器时,没有区别,因为起始点是根文档元素,所以它将在整个文件中进行搜索。

引用当前节点。如果查询以
/
/
开头,则它与文档的根相关<代码>/
遍历所有子体。把它们放在一起,你会得到什么?//something[//other]:如果它能在某处找到另一个,xpath会用//something下的所有值进行响应。就像我得到的:response\u zone.xpath(“//zones information/zones security interface name[//text()='reth2.66']]]/zones security zonename/text()”['A',B',C'].我说的对吗?我想知道为什么它会响应所有区域的安全‌​如果我使用//something[//other]是因为您不是从当前节点进行搜索,那么请使用
//
而不是=)这正是xpath的工作方式,我不确定他们为什么以这种方式实现它。但使用它,您可以获得一些与当前节点完全不相关的值(例如某些页数),并在当前节点中使用它。我想这是主要原因。是的,我知道我不是从当前节点[//区域安全接口名称[text()='reth2.66'],而是整个路径是:response_zone.xpath(“//区域信息/区域安全[//区域安全接口名称[text()='reth2.66']]/zones security zonename/text()”。如何理解这一点?
 >>> response_zone.xpath("//zones-information/zones-security[//zones-security-interface-name[text()='reth2.66']]/zones-security-zonename/text()")
    ['A', 'B', 'C']
    >>> 
    >>> response_zone.xpath("//zones-information/zones-security[.//zones-security-interface-name[text()='reth2.66']]/zones-security-zonename/text()")
    ['A']
>>> response_zone.xpath(".//zones-security[.//zones-security-interface-name[text()='reth2.66']]/zones-security-zonename/text()")
['A']
>>> response_zone.xpath("//zones-security[.//zones-security-interface-name[text()='reth2.66']]/zones-security-zonename/text()") 
['A']