jjzjj

python elementtree xml追加

coder 2024-07-01 原文

我在向 xml 文件中添加元素时遇到了一些问题

我有一个具有这种结构的 xml:

<Root>
    <Item>
        <ItemId>first</ItemId>
        <Datas>
            <Data>one</Data>
            <Data>two</Data>
            <Data>three</Data>
        </Datas>
    </Item>
    <Item>
        <ItemId>second</ItemId>
        <Datas>
            <Data>one</Data>
            <Data>two</Data>
            <Data>three</Data>
        </Datas>
    </Item>
</Root>

我只想在 itemid 为第二个时添加数据,并得到如下输出:

<Root>
    <Item>
        <ItemId>first</ItemId>
        <Datas>
            <Data>one</Data>
            <Data>two</Data>
            <Data>three</Data>
        </Datas>
    </Item>
    <Item>
        <ItemId>second</ItemId>
        <Datas>
            <Data>one</Data>
            <Data>two</Data>
            <Data>three</Data>
            <Data>FOUR</Data>
            <Data>FIVE</Data>
        </Datas>
    </Item>
</Root>

感谢您的帮助!

最佳答案

不清楚您是想如何找到添加元素的位置还是如何添加元素本身。

对于这个具体的例子,为了找到哪里,你可以尝试这样的事情:

import xml.etree.ElementTree as ET
tree=ET.parse('xml-file.txt')
root=tree.getroot()

for item in root.findall('Item'):
    itemid=item.find('ItemId')
    if(itemid.text=='second'):
        #add elements

对于实际的添加部分,您可以尝试:

new=ET.SubElement(item[1],'Data')
new.text='FOUR'
new=ET.SubElement(item[1],'Data')
new.text='FIVE'

new=ET.Element('Data')
new.text='FOUR'
child[1].append(new)
new=ET.Element('Data')
new.text='FIVE'
child[1].append(new)

还有其他几种方法可以完成这两个部分,但总的来说,文档非常有用:https://docs.python.org/2/library/xml.etree.elementtree.html

编辑:

如果“Datas”元素更靠下,您可以使用与上面相同的 Element.find() 方法来查找指定标记的第一次出现。 (Element.findall() 返回指定标签所有出现的列表)。

以下应该可以解决问题:

data=item.find('Datas')
new=ET.SubElement(data,'Data')
new.text='FOUR'
new=ET.SubElement(data,'Data')
new.text='FIVE'

关于python elementtree xml追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631525/

有关python elementtree xml追加的更多相关文章

  1. ruby - 在哈希的键数组中追加元素 - 2

    查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用

  2. ruby - 数组分配与追加行为 - 2

    在我看来,以下行为就像assign方法正在按值处理visited,而append方法将其视为引用:classMyClassdefassign(visited)visited+=["A"]enddefappend(visited)visited[]instance.append(visited)visited#=>["A"]有人可以解释这种行为吗?这不是关于Ruby是否支持按引用传递或按值传递的问题,而是关于下面提供的示例,以及为什么两个据称执行相同操作的方法表现出不同行为的问题。 最佳答案 您在第一个方法中重新定义了局部变量。这是一

  3. ruby-on-rails - 如何在 Ruby 中追加一个字符串 - 2

    我只是想在此字符串的末尾添加一个“/”。执行此操作的最佳方法是什么?>>params[:id]"shirts"我想制作params[:id]=="shirts/"。如何在该字符串的末尾添加/? 最佳答案 最简单的:params[:id]=params[:id]+'/'或params[:id]+='/'莫尔幻想:params[:id]另一种方法:params[:id].concat'/'如果你真的出于某种奇怪的原因坚持使用gsub:params[:id].gsub!/$/,'/' 关于ru

  4. ruby - 将行追加到 csv 文件 Ruby 1.9 CSV lib - 2

    使用Ruby1.9和CSV库,我似乎无法追加一行。文档中的示例打开文件并覆盖该行。将行附加到文档的正确方法是什么?文档中的示例:require'csv'CSV.open("path/to/file.csv","wb")do|csv|csv 最佳答案 我想你可以改变open来使用ab:CSV.open("t.csv","ab")do|csv| 关于ruby-将行追加到csv文件Ruby1.9CSVlib,我们在StackOverflow上找到一个类似的问题: h

  5. ruby - Haml:如果在 Haml 中条件为真,则追加类 - 2

    如果post.published?.post/Poststuff否则.post.gray/Poststuff我已经用railshelper实现了它,但它看起来很丑。=content_tag:div,:class=>"post"+("gray"unlesspost.published?).to_sdo/Poststuff第二种变体:=content_tag:div,:class=>"post"+(post.published??"":"gray")do/Poststuff是否有更简单且特定于haml的方法?更新。特定于Haml,但仍然不简单:%div{:class=>"post"+("g

  6. javascript - 追加按放置数量排序的项目 - 2

    我正在使用此函数按数量顺序追加新项目。此函数每30-50毫秒调用一次。varinsertBefore=false;container.find('.roll-user-row[data-user-id="'+user_data.id+'"]').remove();container.children().each(function(){varbetContainer=$(this),itemAmount=$(this).attr('data-amount'),betId=$(this).attr('data-user-id');if(itemAmountitemAmount=$(thi

  7. javascript - D3JS selectAll追加矩形 - 2

    我对d3.js可视化数据的简洁性感到惊讶。这种简洁背后隐藏的复杂性也让人有点难以理解它是如何工作的。以下是来自http://mbostock.github.com/d3/ex/calendar.html的部分代码问题是它如何在创建的svg数量内为一天创建rect(varsvg=d3....)。在语句svg.selectAll("rect.day")中,我不确定它是如何为每个svg添加rect(selectAll试图选择rect.day!)varmargin={top:19,right:20,bottom:20,left:19},width=960-margin.right-margin

  8. javascript - 在 jQuery 中的最后一个元素之前追加元素不结束 - 2

    我正在尝试使用AJAX帖子发表评论。但是最后一个comment元素包含提交按钮。append后,新项目出现在提交按钮之后。Anycomment1...Anycomment2.......................................和发布请求的结果:success:function(result){if(result.success){$('.commentContainer').append(''+result.text+'');}}我想始终将提交按钮保留在末尾。我该怎么做? 最佳答案 试试这个$(''+resu

  9. javascript - nodejs以数组格式追加到json文件中 - 2

    我希望nodejs按照以下格式附加JSON格式的所有数据[{"name":"admin","message":"dfd","datetime":"2014-06-0313:01:39"},{"name":"admin","message":"dfd","datetime":"2014-06-0313:01:39"},{"name":"admin","message":"dfd","datetime":"2014-06-0313:01:39"}]而且我希望nodejs附加更多数据。我正在尝试追加,但它是这样追加的{"name":"admin","message":"dfd","datet

  10. javascript - d3 在 mousemove 上创建节点的上下文中插入 vs 追加 - 2

    在下面的代码中,作者使用.insert将圆定位在矩形“之前”(我相信实际上它们出现在顶部)而不是将它们直接附加到svg空间。我认为这是不必要的,所以删除了rect和.insert并将圆形元素直接附加到svg空间。然而,结果是圆圈“画得不够快”(因为缺乏更明确的解释)。任何人都可以解释为什么这会发生在我身上,或者给我指出一些确实解释它的文献的方向吗?varwidth=Math.max(900,innerWidth),height=Math.max(700,innerHeight)varsvg=d3.select("body").append("svg").attr({"width":wi

随机推荐