使用Python删除XML文件中的元素

2024-10-01 15:38:17 发布

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

我是Python的新手,我想从XML中删除openingHours元素和子元素。在

我有这个输入

<Root>
   <stations>
      <station id= "1">
          <name>whatever</name>
          <openingHours>
               <openingHour>
                    <entrance>main</entrance>
                       <timeInterval>
                         <from>05:30</from>
                         <to>21:30</to>
                       </timeInterval>
                <openingHour/>
          <openingHours>
      <station/>
      <station id= "2">
          <name>foo</name>
          <openingHours>
               <openingHour>
                    <entrance>main</entrance>
                       <timeInterval>
                         <from>06:30</from>
                         <to>21:30</to>
                       </timeInterval>
                <openingHour/>
          <openingHours>
       <station/>
   <stations/>
  <Root/>

我想要这个输出

^{pr2}$

到目前为止,我已经从另一个线程How to remove elements from XML using Python尝试过这个

from lxml import etree

doc=etree.parse('stations.xml')
for elem in doc.xpath('//*[attribute::openingHour]'):
   parent = elem.getparent()
   parent.remove(elem)
print(etree.tostring(doc))

然而,它似乎不起作用。 谢谢


Tags: tonamefrom元素docrootxmletree
2条回答

您希望删除标记<openingHours>,而不是名为openingHour的某个属性:

from lxml import etree

doc = etree.parse('stations.xml')
for elem in doc.findall('.//openingHours'):
    parent = elem.getparent()
    parent.remove(elem)
print(etree.tostring(doc))

我对您的代码进行了一番改进,但一开始Python不同意您编写XML的方式,希望结束标记中的/位于开头(如</...>),而不是结尾(<.../>)。在

除此之外,代码不能工作的原因是xpath表达式正在寻找属性openingHour,而实际上您需要查找名为openingHours元素。我通过将表达式改为//openingHours来实现它。使整个代码:

from lxml import etree

doc=etree.parse('stations.xml')
for elem in doc.xpath('//openingHours'):
    parent = elem.getparent()
    parent.remove(elem)
print(etree.tostring(doc))

相关问题 更多 >

    热门问题