根据兄弟父/兄弟值解析xml

时间:2012-06-30 00:23:31

标签: python lxml

给出以下xml:

<Title>
<EST>
  <EST_Start_Date>2009-09-21</EST_Start_Date>
  <EST_End_Date>2015-12-31</EST_End_Date>
  <EST_Version>
    <Vendor_ID>asdf-200130</Vendor_ID>
    <Master_Type_HD_SD>SD</Master_Type_HD_SD>
  </EST_Version>
  <EST_Version>
    <Digital_SKU>205119</Digital_SKU>
    <Vendor_ID>qwer-205119</Vendor_ID>
    <Master_Type_HD_SD>HD</Master_Type_HD_SD>
  </EST_Version>
</EST>
</Title>

一个Title节点:

titles = node.xpath("//Title")
for title in titles:
    est=title.find('EST')
    hd_vendor_id = ?

如何提取HD供应商ID,在这种情况下qwer-205118? lxml调用应该与给定的Title节点相关,因为xml文档中有多个标题。

1 个答案:

答案 0 :(得分:3)

使用XPath的强大功能!通过在EST_Version元素上使用谓词,您可以找到具有HD-Master_Type的谓词:

titles = node.xpath("//Title")
for title in titles:
    hd_vendor_id = title.xpath(
        "./EST/EST_Version[Master_Type_HD_SD='HD']/Vendor_ID)")

如果您只需要供应商ID,则可以使用一个XPath:

node.xpath("//Title/EST/EST_Version[Master_Type_HD_SD='HD']/Vendor_ID/text()")

如果您需要更多来自每个EST元素,您可以坚持使用语法:

titles = node.xpath("//Title")
for title in titles:
    est=title.find('EST')
    hd_vendor_id = est.xpath("./EST_Version[Master_Type_HD_SD='HD']/Vendor_ID)"

或者,例如,使用XPath立即选择EST元素:

ests = node.xpath("//Title/EST")
for est in ests:
    hd_vendor_id = est.xpath("./EST_Version[Master_Type_HD_SD='HD']/Vendor_ID)"