使用Python 2.6.6中的ElementTree修改XML - 命名空间问题

时间:2018-03-29 06:42:18

标签: python xml

我有一个像这样的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

0 个答案:

没有答案