簡體   English   中英

如何使用 python ElementTree 獲取 XML 中的兄弟標簽值

[英]How to get sibling tag values in XML using python ElementTree

我一直在嘗試獲取ci-name元素的值,其兄弟RandomAttribute的 value(text) 很重要。 我是 Python 的初學者,我正在嘗試使用 Python 的內置 ElementTree。

這是示例 XML:

<state>
    <s-name>State 1</s-name>
    <district>
        <d-name>District 1</d-name>
        <city>
            <ci-name>City 1</ci-name>
            <RandomAttribute>UN- IMPORTANT</RandomAttribute>
        </city>
        <city>
            <ci-name>City 2</ci-name>
            <RandomAttribute>NOT SO IMPORTANT</RandomAttribute>
        </city>
        <city>
            <ci-name>City 3</ci-name>
            <RandomAttribute>IMPORTANT</RandomAttribute>
        </city>
    </district>
</state>

這個你能幫我嗎。

您可以使用 XPath-1.0 表達式訪問該值

/state/district/city[RandomAttribute='IMPORTANT']/ci-name

只需將其放入 Python XML 處理器即可。
lxml這看起來像

xml = ...
tree = etree.parse(xml)
result = tree.xpath('/state/district/city[RandomAttribute='IMPORTANT']/ci-name')
print(result[0].tag)

輸出應該是

城市3

不像上一個解決方案在一行中解決,但我喜歡跟蹤 XML 的結構。

也許這有助於您了解 ElementTree 的工作原理?

import xml.etree.ElementTree as ET

xml = 'temp.xml'
xmltree = ET.parse(xml)
cities = xmltree.findall('district')[0].findall('city')
for city in cities:
    RandAttribute = city.findall('RandomAttribute')[0].text
    if RandAttribute == "IMPORTANT":
        ci_name = city.findall('ci-name')[0].text
        print(ci_name)
import lxml.etree as etree

如果您正在使用的 xml 是字符串,那么

xml_xpath = "/state/district/city[RandomAttribute='IMPORTANT']/ci-name/text()"
XML_dom = etree.XML(xml)
XML_XPATH_name = etree.XPath(xml_xpath)
return XML_XPATH_name(XML_dom)

暫無
暫無

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

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