第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 ElementTree 訪問 xml 文件中的元素和標記時獲取空列表

使用 ElementTree 訪問 xml 文件中的元素和標記時獲取空列表

楊__羊羊 2023-03-16 09:29:47
endTime這個想法是獲取以下標簽的值xml:<epochs xmlns="http://www.egi.com/epochs_mff" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <epoch>    <beginTime>0</beginTime>    <endTime>3586221000</endTime>    <firstBlock>1</firstBlock>    <lastBlock>897</lastBlock>  </epoch>  <epoch>    <beginTime>3750143000</beginTime>    <endTime>5549485000</endTime>    <firstBlock>898</firstBlock>    <lastBlock>1347</lastBlock>  </epoch></epochs>然而,直接訪問標簽會返回一個空列表:import xml.etree.ElementTree as ETtree = ET.parse(r'epochs.xml')epoch_list=tree.findall("epoch")但是,遍歷tree確實會返回endTime值。import xml.etree.ElementTree as ETtree = ET.parse(r'epochs.xml')for elem in tree:    for subelem in elem:        print(subelem.text)我可以知道如何直接檢索endTime值為300937000的嗎?
查看完整描述

1 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

您的代碼失敗的原因是您的 XML 使用默認命名空間 ( xmlns="http://..." )。

但是您對findall 的調用包含沒有任何名稱空間的紀元 ,因此它不太可能找到任何東西。

要處理命名空間的XML,您必須:

  • 創(chuàng)建已用名稱空間的字典({prefix: namespace}),

  • 在 XPath 表達式中包含相關命名空間的前綴,

  • 將上述字典作為findall的第二個參數傳遞。

就像是:

ns = {'ep': 'http://www.egi.com/epochs_mff'}

epoch_list = tree.findall('ep:epoch', ns)

那么結果是:


[<Element '{http://www.egi.com/epochs_mff}epoch' at 0x...>]

要獲取endTime元素的內容,如果您不關心 XML 樹中的任何中間元素,請運行:


tree.findtext('.//ep:endTime', namespaces=ns)

另一種選擇是傳遞完整的 XML 路徑,從根元素的內容開始,但請記住每一步的命名空間前綴:


tree.findtext('ep:epoch/ep:endTime', namespaces=ns)

如果您有多個 endTime元素,一種可能的解決方案是在循環(huán)中處理它們。


這次findtext沒有用,因為它只找到第一個匹配的元素。您應該使用基于findall的循環(huán),然后(在循環(huán)內)檢索當前元素的文本并按預期使用它,例如:


for it in tree.findall('ep:epoch/ep:endTime', namespaces=ns):

    print(it.text)

當然,將print替換為您需要使用找到的文本的任何內容。


查看完整回答
反對 回復 2023-03-16
  • 1 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號