Python | xml |根据xpath

时间:2018-09-23 05:31:02

标签: xml python-3.x xpath

我有一个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模块。

您能告诉我我做错了什么吗,还是让我知道是否有更好的方法做

0 个答案:

没有答案