【发布时间】:2015-10-02 08:50:58
【问题描述】:
所以我有一个需要更改的 xml 文件。修改后,我想将新内容写入一个新文件,output.xml。我使用了 write() 方法,但每行前面都有很多 ns#。我想出了如何通过使用 _namespace_map 摆脱所有这些 ns#,但是如何保留以前的 xmlns?比如原来的xml文件是:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:1.2">
<extensions>
</extensions>
<profile>
<subsystem xmlns="urn:jboss:domain:logging:1.1">
</subsystem>
<subsystem xmlns="urn:jboss:domain:ee:1.0">
</subsystem>
</profile>
</server>
目前我得到了什么:
<ns0:server xmlns:ns0="urn:jboss:domain:1.2" xmlns:ns1="urn:jboss:domain:logging:1.1" xmlns:ns2="urn:jboss:domain:ee:1.0">
<ns0:extensions>
</ns0:extensions>
<ns0:profile>
<ns1:subsystem>
</ns1:subsystem>
<ns2:subsystem>
</ns2:subsystem>
</ns0:profile>
</ns0:server>
我真正想在 output.xml 中有什么:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:1.2">
<extensions>
</extensions>
<profile>
<subsystem xmlns="urn:jboss:domain:logging:1.1">
</subsystem>
<subsystem xmlns="urn:jboss:domain:ee:1.0">
</subsystem>
</profile>
</server>
我没有显示我在标签中修改的内容,因为它与我的问题并不真正相关。谢谢!
【问题讨论】:
-
顺便说一句,您应该使用
register_namespace,而不是_namespace_map,它在Python 2.7 中可用。 -
@mzjn 我试过 register_namespace。如果您有多个 xmlns,则它不起作用。如果我这样做,则 register_namespace("", "urn:jboss:domain:logging:1.1"),然后 register_namespace("", "urn:jboss:domain:ee:1.0"),第一个将被覆盖。这样我就没有 ns2,但仍然有 ns0 和 ns1。
-
是的,您不能将相同的前缀(在本例中为“空前缀”)分配给两个不同的命名空间 URI。我不认为这会奏效。
-
是的,我认为这有点像映射的东西。因此,我使用了 _namespace_map,它使用 ns URI 作为键,前缀作为值。
标签: python-2.7 xml-parsing elementtree