我有一个xml文件-
<TAG1>
<TAG2 name = 'a'>
<TAG3>
<TAG4 prop = 5>
<TAG5> Val1 </TAG5>
<TAG6> Val2 </TAG6>
</TAG4>
</TAG3>
</TAG2>
<TAG2 name = 'b'>
<TAG3>
<TAG4 prop = 8>
<TAG5> Val3 </TAG5>
<TAG6> Val4 </TAG6>
</TAG4>
</TAG3>
</TAG2>
</TAG1>
我有以下xpath:/ TAG1 / TAG2 [@ name ='a'] / TAG3 / TAG4 [@ prop = 5] / TAG5
我需要得到Val1。但不能这样做。
tree = ET.parse(in_xml_file)
root = tree.getroot()
with open(in_xpath_file, 'r') as xpath_file:
for line in xpath_file:
#print (root.xpath(line))
print (root.findall(line, namespaces))
其中in_xml_file是文件, 并且in_xpath_file包含我要查找[每行一个]值的所有xpath。
使用xpath方法时,出现以下错误-
回溯(最近通话最近): 文件“ xmlParser.py”,第71行,在 fn_parse_xml_file(xml_file,xpath_file) 文件“ xmlParser.py”,第58行,位于fn_parse_xml_file中 打印(root.xpath(line)) lxml.etree._Element.xpath中的文件“ src / lxml / etree.pyx”,行1589(src \ lxml \ etree.c:61238) 在lxml.etree.XPathElementEvaluator中的第307行中的文件“ src / lxml / xpath.pxi”。调用(src \ lxml \ etree.c:178777) > lxml.etree._XPathEvaluatorBase._handle_result(src \ lxml \ etree.c:177729)中的文件src / lxml / xpath.pxi,第227行 lxml.etree.XPathEvalError:未定义的名称空间前缀
在将xpath方法与命名空间一起使用时,出现以下错误-
回溯(最近通话最近): 文件“ xmlParser.py”,第73行,在 fn_parse_xml_file(xml_file,xpath_file) fn_parse_xml_file中的文件“ xmlParser.py”,第60行 打印(root.xpath(行,名称空间)) lxml.etree._Element.xpath中的文件“ src / lxml / etree.pyx”,第1580行(src \ lxml \ etree.c:61145) TypeError:xpath()恰好接受1个位置参数(给定2个)
使用findall方法时,出现以下错误-
回溯(最近通话最近): 文件“ xmlParser.py”,第73行,在 fn_parse_xml_file(xml_file,xpath_file) fn_parse_xml_file中的文件“ xmlParser.py”,第61行 打印(root.findall(行,名称空间)) lxml.etree._Element.findall中的文件“ src / lxml / etree.pyx”,行1565(src \ lxml \ etree.c:60834) lxml._elementpath.findall中的文件“ src / lxml / _elementpath.py”,第322行(src \ lxml_elementpath.c:9892) lxml._elementpath.iterfind中的文件“ src / lxml / _elementpath.py”,第300行(src \ lxml_elementpath.c:9282) lxml._elementpath._build_path_iterator中的文件``src / lxml / _elementpath.py'',第269行(src \ lxml_elementpath.c:8466) SyntaxError:无法在元素上使用绝对路径
PS:我同时尝试了xml和lxml模块。
您能告诉我我做错了什么吗,还是让我知道是否有更好的方法做