Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/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 确定查询中xpath输出的类型(节点、字符串)_Python_Xpath_Types_Lxml - Fatal编程技术网

Python 确定查询中xpath输出的类型(节点、字符串)

Python 确定查询中xpath输出的类型(节点、字符串),python,xpath,types,lxml,Python,Xpath,Types,Lxml,是否有一种独立于XML文档的方法来确定xpath返回值的类型?具体来说,我使用的是lxml 示例: //a和//b[a/@href]将始终返回零个或多个元素的列表 //a/text()和//a/@href将始终返回零个或多个字符串的列表 虽然我可以想出各种方法来分析这些问题,但感觉就像是试图重新发明轮子。有更好的方法吗 背景 当发现没有任何a标记并且我已经编写了root.xpath('//a')[0]时,我已经厌倦了捕获异常。我不想盲目地抓住一切。因此,我编写了一组函数,它们总是返回正确类型

是否有一种独立于XML文档的方法来确定xpath返回值的类型?具体来说,我使用的是lxml

示例:

  • //a
    //b[a/@href]
    将始终返回零个或多个元素的列表
  • //a/text()
    //a/@href
    将始终返回零个或多个字符串的列表
虽然我可以想出各种方法来分析这些问题,但感觉就像是试图重新发明轮子。有更好的方法吗

背景

当发现没有任何
a
标记并且我已经编写了
root.xpath('//a')[0]
时,我已经厌倦了捕获异常。我不想盲目地抓住一切。因此,我编写了一组函数,它们总是返回正确类型的内容。
cssselector
attrib
替换工作正常,但是如果不知道输出应该是什么,我就无法满足
xpath
输出的期望


如果你真的在乎,这是我的密码

假设像
//b[a/@href]
这样的XPath表达式是静态的,is将始终返回相同的类型。(在本例中是元素列表。)您只想知道列表是否为空。一个简单的
if
语句可以做到这一点:

results = document.xpath('//b[a/@href]')
if results:
    do_something(results[0]
else:
    no_result()

如果不想捕获异常,请存储xpath返回的列表并检查其长度。或者使用正确的XPath获取第一个元素:
root.XPath(“//a[1]”)
实际上,所有四个表达式都返回节点列表。前两个为元素节点,第三个为文本节点,第四个为属性节点。