Python – lxml删除一些xml标签并移动其他标签

Python – lxml删除一些xml标签并移动其他标签,第1张

概述我试图打开一个xml,删除整个标签及其内容,并在xml中移动其他标签. 这是我原来的导入xml: <?xml version="1.0" encoding="UTF-8"?><package> <language>en-GB</language> <video> <original_spoken_locale>en-US</original_spoken_loca 我试图打开一个xml,删除整个标签及其内容,并在xml中移动其他标签.

这是我原来的导入xml:

<?xml version="1.0" enCoding="UTF-8"?><package>    <language>en-GB</language>    <vIDeo>        <original_spoken_locale>en-US</original_spoken_locale>        <copyright_cline>2012 copyright</copyright_cline>        <release_date>2012-04-23</release_date>        <Title>Amazing Film</Title>    </vIDeo>    <provIDer>testprovIDer</provIDer></package>

我需要删除< copyright_cline>标签和< Title>标签.然后我需要移动< provIDer>标记为< vIDeo>在< original_spoken_locale>下面标记并定位它标记并移动< release_date>在< vIDeo>下面标记标签.

这是导出的导出xml:

<?xml version="1.0" enCoding="UTF-8"?><package>    <language>en-GB</language>    <vIDeo>        <original_spoken_locale>en-US</original_spoken_locale>        <provIDer>testprovIDer</provIDer>        <release_date>2012-04-23</release_date>    </vIDeo>    <release_date>2012-04-23</release_date></package>

我现在已经成功安装了lxml,因此寻找理想的解决方案.

亲切的问候.

我已经能够删除不需要的标签及其内容,但仍需要能够重新排序/移动其他标签,最好不要更换.我也无法删除这行xml代码“

<!--Carpet ID: fd54678-->

这是我目前拥有的:

from lxml import etreexmlfileIn = '/xmls/Metadata.xml'xmlfileOut = '/xmls/output.xml'tree = etree.parse(xmlfileIn)root = tree.getroot()etree.strip_elements(root,'assets')etree.strip_Tags(root,'assets')etree.strip_elements(root,'chapters')etree.strip_Tags(root,'chapters')etree.strip_elements(root,'xID')etree.strip_Tags(root,'xID')# Write the new xml filetree.write(xmlfileOut,pretty_print=True,xml_declaration=True,enCoding="utf-8")

所以我仍然需要删除<! - 地毯ID:fd54678 - >标签.我想通过通配符删除这些,因为有很多<! - .* - >,因为中间的内容会发生变化.我还需要知道如何移动标签块.

解决方法 由于还没有人回答,我会试试;但我要从阅读而不是实验.如果我错过任何事情,请提前道歉……

有关如何移动元素,请参阅Move an entire element in with lxml.etree

如上所述,要特别小心,因为文本节点不是lxml中的节点(见下文).

至于评论,我在lxml中找不到任何方式来获取评论或直接“移动”元素.你可以先用“sed”或其他东西去除它们.

注意事项

Elementtree和lxml似乎热衷于只有一种节点.这有一些可能有问题的后果(“事情应该尽可能简单,但不简单”):

>使用注释(如本例所示)或PI更难,因为它们不是模型中的第一类概念.
>文本特别困难,因为lxml和elementtree会将任何XML元素的结束标记后面的文本转换为该元素的属性(“尾部文本”).它被视为与该元素的类型名称,属性和子项相同.这可以是一种工作(它是图灵机,你知道),但它需要完全不同的思维方式.

我注意到关于lxml的作者经常声明它主要用于真正没有太多文本的XML结构.你给出的例子就是这样的;如果是这样,你很幸运.但是当文本很重要时,即使是这样简单的事情:

<p>As everyone<footnote>Well,almost everyone</footnote> kNows...</p>

文本“kNow …”是< footnote>的一部分. lxml中的节点.当您移动或删除或替换脚注时,文本随之而来.但当然,该文本不是脚注的一部分(它毕竟是在脚注结束后发生的).

我不知道lxml对“作为每个人”做了什么 – 它不会在任何元素结束后出现.我找不到lxml如何处理它的任何内容.

如果任何地方有任何文字内容,请务必小心.

总结

以上是内存溢出为你收集整理的Python – lxml删除一些xml标签并移动其他标签全部内容,希望文章能够帮你解决Python – lxml删除一些xml标签并移动其他标签所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存