Python - XML解析 - 访问同一元素的不同后代的值

时间:2016-05-25 15:42:24

标签: python xml lxml

我正在尝试使用Python解析Xml文件。我的文件结构类似于下面的结构:

<dataset>
  <dataTable id = 123>
      <name> Name1 </name>
      <attributeList>
          <attribute id = 1>
               <measurement>
                  <textDomain>
                     <definition>User defined. </definition>
                  </textDomain>
               </measurement>
          </attribute>
          <attribute id = 2>
               <measurement>
                  <dateTime>
                     <formatString>MM-YYYY </formatString>
                  </dateTime>
               </measurement>
          </attribute>
      </attributeList>
</dataTable>
<dataTable id = 456>
    <name> Name8 </name>
    <attributeList>
        <attribute id = 3>
             <measurement>
                <unit>
                   <standardUnit>degree</standardUnit>
                </unit>
             </measurement>
        </attribute>
   </attributeList>
 </dataTable>
</dataset>

我想在<measurement>代码中提取文字(&#34;用户定义。&#34;,&#34; MM-YYYY&#34;,&#34;度&#34;) 。 <measurement>标记针对每个<attribute>具有不同的后代。在这种情况下如何提取文本? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用通配符来获取 measurement 标记的子项以及该子项的任何子项:

import lxml.etree as et

xml = et.parse("in.xml")

print(xml.xpath("//attributeList//measurement/*/*/text()"))

这给了你:

['User defined.', 'MM-YYYY ', 'degree']  

你可以明确地拉第一个孩子:

 xml.xpath("//attributeList//measurement/*[1]/*[1]/text()")

但事实上,只有一个孩子不会有任何不同。