Python中ElementTree中的同级节点

时间:2014-01-17 05:04:28

标签: python xml xpath nodes

我正在查看我想要添加节点的XML片段。

<profile>
    <dog>1</dog>
        <halfdog>0</halfdog>
    <cat>545</cat>
        <lions>0</lions>
    <bird>23</bird>
        <dino>0</dino>
        <pineapples>2</pineapples>
    <people>0</people>
</profile>

使用上面的XML,我可以在其中插入XML节点。但是,我无法在确切的位置插入它。

有没有办法找到我是否在某个节点旁边,无论是在之前还是之后。假设我想在<snail>2</snail><dino>0</dino>节点之间添加<pineapples>2</pineapples>

使用ElementTree如何找到我旁边的节点?我问的是ElementTree或任何标准的Python库。不幸的是,lxml对我来说是不可能的。

2 个答案:

答案 0 :(得分:3)

我认为使用ElementTree不可行,但您可以使用标准python minidom来完成:

# create snail element
snail = dom.createElement('snail')
snail_text = dom.createTextNode('2')
snail.appendChild(snail_text)

# add it in the right place
profile = dom.getElementsByTagName('profile')[0]
pineapples = dom.getElementsByTagName('pineapples')[0]
profile.insertBefore(snail, pineapples)

输出:

<?xml version="1.0" ?><profile>
    <dog>1</dog>
    <halfdog>0</halfdog>
    <cat>545</cat>
    <lions>0</lions>
    <bird>23</bird>
    <dino>0</dino>
    <snail>2</snail><pineapples>2</pineapples>
    <people>0</people>
</profile>

答案 1 :(得分:2)

如果您知道父元素和之前要插入的元素,则可以对ElementTree使用以下方法:

index = parentElem.getchildren().index(elemToInsertBefore)
parent.insert(index, newElement)