0

次の 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ですか? xml ドキュメントには複数のタイトルがあるため、lxml 呼び出しは、指定された Title ノードに関連している必要があります。

4

1 に答える 1

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)"
于 2012-06-30T00:54:43.920 に答える