簡體   English   中英

Python,根據孩子的屬性列出的父母

[英]Python, List of parents based on child's attribute

我不習慣在Python中解析xml,並且在以下內容上有些卡住。

我有一個XML文件,其中有許多位置表示為節點元素中的緯度,經度值。

位置類型在具有“ k”和“ v”屬性的“ tag”元素中。

<root>
    <node id="12345678" lat="50.5" lon="3.0" otherdata="not needed">
        <tag k="this_key" v="value_a"/>
        <tag k="that_key" v="value_b"/>
    </node>
    <node ...>
        <tag .../>
    </node>
</root>

我需要過濾特定的“ v”值,然后使用該值使用父節點ID作為唯一ID來生成經緯度值列表。

我可以得到以下第一個節點

fence = soup.find(v="FenceLine")
prevnode = fence.find_parents("node")
print prevnode

如何返回僅包含具有特定屬性的孩子的父母的集合?

我一直在搜索后嘗試使用BeautifulSoup,但不確定是否最適合我的需求?

如果我有您想要的東西,您可以使用標准的“ xml”庫來實現您的目的:

import xml.etree.ElementTree as ET

def get_dict(value):
    root = ET.parse('a.xml')

    tmp={}

    for node in root.iterfind(".//tag[@v='{0}']/..".format(value)):
        tmp[node.get('id')] = (node.get('lat'),node.get('lon'))

    return tmp

有趣的部分是:

root.iterfind(".//tag[@v='{0}']/..".format(value))

它返回一個迭代器,該迭代器生成所有具有“ v”屬性與“值”匹配的“標簽”的父標簽。 如果您希望獲取列表而不是迭代器,則可以使用“ findall”方法代替“ iterfind”。

有關“ xml”庫和“ find”的棘手語法的更多信息,您可以閱讀官方的xml文檔xpath建議

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM