【问题标题】:How to get specific block(group) based on child node's value in XPath from the XML?如何根据 XML 中 XPath 中子节点的值获取特定的块(组)?
【发布时间】:2016-07-30 16:07:40
【问题描述】:

我是 XPath 的新手。我有以下 XML 文件。 这是我的xml文件:

<?xml version='1.0' encoding='utf-8'?>
<items>
   <item>
      <country>India</country>
      <referenceId>IN375TP</referenceId>
      <price>400</price>
   </item>
   <item>
      <country>Australia</country>
      <referenceId>AU120ED</referenceId>
      <price>15</price>
   </item>
   <item>
      <country>United Kingdom</country>
      <referenceId>UK862RB</referenceId>
      <price>20</price>
   </item>
</items>

我想要以下&lt;item&gt; 标记作为输出:

<item>
  <country>Australia</country>
  <referenceId>AU120ED</referenceId>
  <price>15</price>
</item>      

注意:请使用/items/item[referenceId/text()="AU120ED"]这样的条件

【问题讨论】:

  • 基于什么值?
  • 你从哪里得到的 xml?
  • 我应该在这里使用 ElementTree 吗?
  • 你有两个不同的结束标签&lt;referenceId&gt;AU120ED&lt;/date&gt;,有很多items还是只有一个?
  • 糟糕!!!!!!!对不起,我修改了

标签: python xml xpath xml-parsing lxml


【解决方案1】:

如果要按国家/地区查找项目,可以使用 xpath 指定要在具有 text=country_name 的项目中查找项目:

from lxml.etree import parse, HTMLParser

xml = parse("check.xml",HTMLParser())

print(xml.find("//items//item[country='Australia']"))
<Element item at 0x7f40faa28950>

如果你真的想搜索是referenceid,直接改成item[referenceid='AU120ED']

print(xml.find("//items//item[referenceid='AU120ED']"))
<Element item at 0x7f02c0c24998>

对于xml

from xml.etree import ElementTree as et

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

print(xml.find(".").find("./item[referenceId='AU120ED']"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多