【问题标题】:How to change an element.text in XML file using lxml如何使用 lxml 更改 XML 文件中的 element.text
【发布时间】:2018-04-06 00:15:07
【问题描述】:

这里是一个 xml 文件的示例:这里 houseNum 不是连续的。

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfHouse>
<XmlForm>
<houseNum>0</houseNum>
 <plan1> 
  <coord>
    <X> 1.2  </X>
    <Y> 2.1  </Y>
    <Z> 3.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 0   </G>
    <B> 0   </B>
  </color>
 </plan1>
 <plan2>
  <coord>  
    <X> 21.2  </X>
    <Y> 22.1  </Y>
    <Z> 31.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 0   </G>
    <B> 0   </B>
</color>
 </plan2> 
</XmlForm>

<XmlForm>
<houseNum>3</houseNum>
 <plan1> 
  <coord>
    <X> 1.2  </X>
    <Y> 2.1  </Y>
    <Z> 3.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 0   </G>
    <B> 0   </B>
  </color>
 </plan1>
 <plan2>
  <coord>  
    <X> 21.2  </X>
    <Y> 22.1  </Y>
    <Z> 31.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 0   </G>
    <B> 0   </B>
</color>
 </plan2> 
</XmlForm>

<XmlForm>
<houseNum>5</houseNum>
 <plan1> 
  <coord>
    <X> 11.2  </X>
    <Y> 12.1  </Y>
    <Z> 13.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 255   </G>
    <B> 0   </B>
  </color>
 </plan1>
 <plan2>
  <coord>  
    <X> 211.2  </X>
    <Y> 212.1  </Y>
    <Z> 311.0  </Z>
  </coord>
  <color> 
    <R> 255 </R>
    <G> 0   </G>
    <B> 255   </B>
</color>
 </plan2> 
</XmlForm>
</ArrayOfHouse>

我想将 .text 修改为 0,1,3 而不是 0,3,5。这是我使用 lxml 的脚本,它会生成错误的结果。

def Rename_Elem_In_Xml_File(xml_file, index_start, index_end):
    # Parse from the xml string file
    tree = etree.parse(xml_file)
    #Rename the elements
    root = tree.getroot()
    elementlist = [e for e in root.iter('houseNum')]
    for index_element in range(1, len(elementlist)):
        try:
           if(index_element>index_start):
                elementlist[index_element].text=index_element
                print(elementlist[index_element].text)
        except:
            print(' except  ')
            print(elementlist[index_element].text)
    file = etree.tostring(root).decode("utf-8")
    print(file)

我尝试遍历元素并更改文本。此脚本删除文本和标记的开头。

【问题讨论】:

    标签: python xml lxml xml.etree


    【解决方案1】:

    将 index_element 转换为字符串应该可以修复消失的 &lt;houseNum&gt; 标记。

    elementlist[index_element].text=str(index_element)
    

    ...

    >>> rename.Rename_Elem_In_Xml_File('houses.xml', 0, 10)
    1
    2
    <ArrayOfHouse>
    <XmlForm>
    <houseNum>0</houseNum>
     <plan1>
      <coord>
        <X> 1.2  </X>
        <Y> 2.1  </Y>
        <Z> 3.0  </Z>
      </coord>
      <color>
        <R> 255 </R>
        <G> 0   </G>
        <B> 0   </B>
      </color>
     </plan1>
     <plan2>
      <coord>
        <X> 21.2  </X>
        <Y> 22.1  </Y>
        <Z> 31.0  </Z>
      </coord>
      <color>
        <R> 255 </R>
        <G> 0   </G>
        <B> 0   </B>
    </color>
     </plan2>
    </XmlForm>
    
    <XmlForm>
    <houseNum>1</houseNum>
     <plan1>
      <coord>
        <X> 1.2  </X>
        <Y> 2.1  </Y>
        <Z> 3.0  </Z>
      </coord>
      <color>
        <R> 255 </R>
        <G> 0   </G>
        <B> 0   </B>
      </color>
     </plan1>
     <plan2>
      <coord>
        <X> 21.2  </X>
        <Y> 22.1  </Y>
        <Z> 31.0  </Z>
      </coord>
      <color>
        <R> 255 </R>
        <G> 0   </G>
        <B> 0   </B>
    </color>
     </plan2>
    </XmlForm>
    
    <XmlForm>
    <houseNum>2</houseNum>
     <plan1>
      <coord>
        <X> 11.2  </X>
        <Y> 12.1  </Y>
        <Z> 13.0  </Z>
      </coord>
      <color>
        <R> 255 </R>
        <G> 255   </G>
        <B> 0   </B>
      </color>
     </plan1>
     <plan2>
      <coord>
        <X> 211.2  </X>
        <Y> 212.1  </Y>
        <Z> 311.0  </Z>
      </coord>
      <color>
        <R> 255 </R>
        <G> 0   </G>
        <B> 255   </B>
    </color>
     </plan2>
    </XmlForm>
    </ArrayOfHouse>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 2012-09-01
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多