添加值来标记XML的Python

问题描述:

我有以下问题:我有我通过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。

有人可以帮忙吗?

这个问题没有明确说明,但是如果我理解正确的话,你想更新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