我有一个像这样的xml:
<?xml version="1.0" encoding="UTF-8"?>
<jdbc-data-source xsi:schemaLocation="http://xmlns.oracle.com/weblogic/jdbc-data-source http://xmlns.oracle.com/weblogic/jdbc-data-source/1.5/jdbc-data-source.xsd" xmlns="http://xmlns.oracle.com/weblogic/jdbc-data-source" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls">
<name>wlng.datasource</name>
<jdbc-driver-params>
<url>jdbc:mysql://hwdbhost:3306/gwdb</url>
............
我正在尝试更新 url 标记的文本值,我的代码是:
import xml.etree.ElementTree as ET
filename = "wlng-mysql-single-jdbc.xml"
ET._namespace_map["http://xmlns.oracle.com/weblogic/jdbc-data-source"] = ''
ET._namespace_map["http://xmlns.oracle.com/weblogic/security"] = "sec"
ET._namespace_map["http://www.w3.org/2001/XMLSchema-instance"] = "xsi"
ET._namespace_map["http://xmlns.oracle.com/weblogic/security/wls"] = "wls"
# Parse the file
tree = ET.parse(filename)
# Get the root element - Configuration
root = tree.getroot()
jdbcRoot = root.find('jdbc-driver-params')
for child in root:
print child.tag
#print child.tag.split("}")[1][0:]
if child.tag.split("}")[1][0:] == "jdbc-driver-params":
#print child.tag[0].tag
for subchild in child:
print subchild.tag.split("}")[1][0:]
if subchild.tag.split("}")[1][0:] == "url":
subchild.text = "newvalue1"
# Modifying the XML element with the new content
tree.write('test.xml',encoding="UTF-8")
更新后,有两个问题:
1)即使我已经注册了所有名称空间,它也会忽略几个名称空间。如何将所有名称空间保留为原始名称空间?
2)现在所有元素都以冒号为前缀。喜欢&lt;:name&gt; wlng.datasource。我怎么能避免这种情况。
结果XML如下所示:
<?xml version='1.0' encoding='UTF-8'?>
<:jdbc-data-source xsi:schemaLocation="http://xmlns.oracle.com/weblogic/jdbc-data-source http://xmlns.oracle.com/weblogic/jdbc-data-source/1.5/jdbc-data-source.xsd" xmlns:="http://xmlns.oracle.com/weblogic/jdbc-data-source" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<:name>wlng.datasource</:name>
<:jdbc-driver-params>
<:url>newvalue1</:url>
............
有人可以帮我解决这个问题。 Python版本是2.6.6。
此致 Subeesh