添加值来标记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)
输出:
<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>
感谢你,是非常有帮助 – Nant