python - 动态修改XML文件中特定属性的值

标签 python xml xml-parsing elementtree

我想修改XML文件的edmx:ReferenceUri的所有属性值。

我的文件(Chassis.xml)内容是

<?xml version="1.0" encoding="UTF-8"?>

<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
  <edmx:Reference Uri="http://docs.oasis-open.org/odata/odata/v4.0/errata03/csd01/complete/vocabularies/Org.OData.Measures.V1.xml">
    <edmx:Include Namespace="Org.OData.Measures.V1" Alias="Measures"/>
  </edmx:Reference>
  <edmx:Reference Uri="http://redfish.dmtf.org/schemas/v1/RedfishExtensions_v1.xml">
    <edmx:Include Namespace="RedfishExtensions.v1_0_0" Alias="Redfish"/>
    <edmx:Include Namespace="Validation.v1_0_0" Alias="Validation"/>
  </edmx:Reference>
  <edmx:Reference Uri="http://redfish.dmtf.org/schemas/v1/Resource_v1.xml">
    <edmx:Include Namespace="Resource"/>
    <edmx:Include Namespace="Resource.v1_0_0"/>
    <edmx:Include Namespace="Resource.v1_1_0"/>
  </edmx:Reference>
  <edmx:Reference Uri="http://redfish.dmtf.org/schemas/v1/Thermal_v1.xml">
    <edmx:Include Namespace="Thermal"/>
  </edmx:Reference>
</edmx:Edmx>

我能够读取 Uri 的所有值,但无法将这些值动态更新到同一文件。用于获取 Uri 值的代码是

import xml.etree.ElementTree as ET
tree = ET.parse('Chassis.xml')
root = tree.getroot()

for item in root.findall('{http://docs.oasis-open.org/odata/ns/edmx}Reference'):
    if 'Uri' in item.attrib:
        item.attrib['Uri']="new-uri"
ET.write("Chassis.xml")    

我的问题如何动态读取和修改 Uri 的属性值到同一文件?

最佳答案

这里我们定义了寄存器命名空间,此代码可以更改引用的 Uri:

import xml.etree.ElementTree as ET
tree = ET.parse('Chassis_v1.xml')
root = tree.getroot()

for item in root.findall('{http://docs.oasis-open.org/odata/ns/edmx}Reference'):
    if 'Uri' in item.attrib:
    a=item.attrib['Uri']
        b=a.rsplit('/', 1)[1]
        item.attrib['Uri']="/redfish/v1/schemas/"+b

ET.register_namespace('edmx','http://docs.oasis-open.org/odata/ns/edmx')
ET.register_namespace('','http://docs.oasis-open.org/odata/ns/edm')
tree.write("Chassis_v1.xml",xml_declaration=True,encoding='utf-8',method="xml")

关于python - 动态修改XML文件中特定属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49537354/

相关文章:

python - Tkinter 按钮不会配置

android - 我如何调整空间和文件的整体外观,使其看起来更像图片?

Java/Android - https 在 apache http 中不工作

sql-server - 为批量加载到 SQL Server 创建 XML 架构 - 子元素描述父元素

c# - Xunit 报告工具

ruby-on-rails - 找不到 libxml2 的包配置

excel - VBA 中的 LoadXML 未将字符串解析为可用的 DOMDocument60

javascript - Ajax Form 和 Django 集成发布错误

python - 在 Python 的 Tkinter 主窗口上放置绘图

python - 使用python将视频创建到缓冲区