用Python编辑XML文件子节点中的所有文本

2024-04-28 10:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编辑XML文件中名为“Volume”的所有标记中的文本,方法是将文本乘以用户输入的数字。“Volume”标签内的文本始终是数字。到目前为止,我的代码还可以工作,但只对“卷”文本的第一个实例有效。在

下面是一个XML示例:

         <blah>
                <moreblah> sometext </moreblah> ;
                <blah2>
                        <blah3> <blah4> 30 </blah4> <Volume> 15 </Volume> </blah3>
                </blah2>
        </blah>

         <blah>
                <moreblah> sometext </moreblah> ;
                <blah2>
                        <blah3> <blah4> 30 </blah4> <Volume> 25 </Volume> </blah3>
                </blah2>
        </blah>

下面是我的Python代码:

^{pr2}$

我知道在我的密码里文档getElementsByTagName('Volume')[0]”表示“Volume”标记的第一个实例,但我只是作为一个测试来测试它是否可以工作。所以我知道代码正按照它应该的方式工作。但是我想知道是否有人有什么建议,或者告诉我将用户输入百分比应用于“Volume”标记的所有实例的最简单方法。在

这也是我在Python上的第一次尝试,所以如果您看到任何其他奇怪的东西,请告诉我。在

谢谢你的帮助!在


Tags: 实例方法代码用户标记文本数字xml
1条回答
网友
1楼 · 发布于 2024-04-28 10:35:43

如果使用更现代的xmlapi,比如ElementTree(在标准库中)或{a2}(更高级),您会更开心。在

在ElementTree或lxml中,您可以访问XPath(或类似的东西),这允许在XML文档中查找元素和属性时使用更灵活的语法。在

在ElementTree中:

volumes = my_parsed_xml_file.find('.//Volume')

…将找到Volume元素的所有匹配项。在

如果您坚持使用当前语法,请执行以下操作:

^{pr2}$

…你特别要求第零个(第一个)Volume。如果你想处理所有这些,你需要一个循环:

for volume in doc.getElementsByTagName('Volume'):
  child = volume.childNodes[0]
  // ... rest of your code inside the loop

如果你不熟悉像循环这样的结构,你应该退一步读一本介绍性的编程指南,因为没有一些基础知识,事情会很快变得相当复杂。祝你好运!在

相关问题 更多 >