使用python,elementtree,xml解析器来获取由于某种原因不起作用的属性?

时间:2017-08-19 23:47:30

标签: python xml elementtree

我是python和解析xml的新手,但是我遇到了一个特殊的xml文件问题,该文件是由我使用的程序吐出来的。我尝试使用python和elementtree解析这个xml文件,以便提取url数据(下面的URL是假的)。关于为什么这不起作用的任何想法?

我的python代码:

def xmlTreeParser(fileName,attribute,tagName):
tree = ET.parse(fileName)
root = tree.getroot()

attribArray = [element.attrib[attribute] for element in root.findall(tagName)]
print attribArray

xmlTreeParser("xml_file.xml",'text','Expr')

这是我的xml文件:

<Query id="f9cef041-085d-47e0-8d16-15e36bba1ec8" name="">
  <Description />
  <JustSortedColumns />
  <Conditions linking="All">
    <Condition class="PDCT" enabled="True" readOnly="False" linking="Any">
      <Condition class="SMPL" enabled="True" readOnly="False">
        <Operator id="Contains" />
        <Expressions>
          <Expr class="ENTATTR" id="Person.LinkedInUrl" />
          <Expr class="CONST" type="String" kind="Scalar" value="https://www.linkedin.com/Bill-Smith" text="https://www.linkedin.com/Bill-Smith" />
        </Expressions>
      </Condition>
    </Condition>
  </Conditions>
</Query>

我写的python在我自己编写的另一个测试xml文件上运行得很好。我不知道为什么我无法解析这个特定的xml块。谢谢大家。

1 个答案:

答案 0 :(得分:0)

对于您进行的特定通话,您需要添加此语法才能到达标记Exprdoc):

xmlTreeParser("xml_file.xml",'text','.//Expr')

但是你的Xml也没有像文本这样的所有属性,你应该防止这样的错误:

attribArray = [element.attrib.get(attribute, '') for element in root.findall(tagName)]
# -----------------------------^
print(attribArray)

xmlTreeParser("xml_file.xml",'text','.//Expr')
相关问题