2016-03-03 30 views
0

我有以下問題:我有我通過xml.etree.ElementTree分析其結構如下添加值來標記XML的Python

<e3r> 
<moreData>false</moreData> 
<data> 
<CashDividend Isin="IE00BYM8JD58" AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor=""/> 
<CashDividend Isin="IE00BZ163G84" AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor="" Amount_Status=""/> 
<CashDividend Isin="IE00BZ163H91" AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor=""/> 
<CashDividend Isin="IE00BZ163M45 " AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor="" /> 
</data> 
</e3r> 

我得到了一些標籤數據的XML文件AdjustmentFactor通過一個API(我使用Isin來獲取數據)以及我想要實現的是將我通過API獲得的數據添加到AdjustmentFactor。 (這是鏈接到伊辛)。我無法解決這個問題。

這是我如何讓每個ISIN:

isins = [] 

for child in tree.getroot().getchildren()[1].getchildren(): 
      isins.append(child.attrib['Isin']) 

for isin in isins: 
    print isin 

但我不知道如何使用存儲在列表isins數據數據添加到AdjustmentFactor。

有人可以幫忙嗎?

回答

1

這個問題沒有明確說明,但是如果我理解正確的話,你想更新AdjustmentFactor屬性值,其中Isin屬性等於某個值。您可以使用XPath表達式(如.//element_name[@attribute_name='attribute_value'])通過其屬性值查找元素。

工作演示例如:

from xml.etree import ElementTree as et 

raw = '''<e3r> 
<moreData>false</moreData> 
<data> 
<CashDividend Isin="IE00BYM8JD58" AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor=""/> 
<CashDividend Isin="IE00BZ163G84" AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor="" Amount_Status=""/> 
<CashDividend Isin="IE00BZ163H91" AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor=""/> 
<CashDividend Isin="IE00BZ163M45 " AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor="" /> 
</data> 
</e3r>''' 

root = et.fromstring(raw) 
isin = "IE00BYM8JD58" 
adjustment_factor = "FOO" 
element = root.find(".//CashDividend[@Isin='%s']" % isin) 
element.set("AdjustmentFactor", adjustment_factor) 

print et.tostring(root) 

eval.in demo

輸出:

<e3r> 
<moreData>false</moreData> 
<data> 
<CashDividend AdjustmentFactor="FOO" Adjustment_Date="" Adjustment_Factor="" Isin="IE00BYM8JD58" /> 
<CashDividend AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor="" Amount_Status="" Isin="IE00BZ163G84" /> 
<CashDividend AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor="" Isin="IE00BZ163H91" /> 
<CashDividend AdjustmentFactor="" Adjustment_Date="" Adjustment_Factor="" Isin="IE00BZ163M45 " /> 
</data> 
</e3r> 
+1

感謝你,是非常有幫助 – Nant