Python:使用ElementT读写名称空间的XML

2024-10-03 23:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

此XML文件名为example.xml

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>14.0.0</modelVersion>
  <groupId>.com.foobar.flubber</groupId>
  <artifactId>uberportalconf</artifactId>
  <version>13-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Environment for UberPortalConf</name>
  <description>This is the description</description>    
  <properties>
      <birduberportal.version>11</birduberportal.version>
      <promotiondevice.version>9</promotiondevice.version>
      <foobarportal.version>6</foobarportal.version>
      <eventuberdevice.version>2</eventuberdevice.version>
  </properties>
  <!-- A lot more here, but as it is irrelevant for the problem I have removed it -->
</project>

如果我加载示例.xml使用ElementTree文件并打印根节点:

^{pr2}$

我看到元素还包含名称空间http://maven.apache.org/POM/4.0.0。在

我该怎么办:

  1. 获取foobarportal.version文本,将其增加一个并将XML文件写回,同时保持文档加载时的名称空间,也不更改整个XML布局。在
  2. 使用任何名称空间(而不仅仅是http://maven.apache.org/POM/4.0.0)加载它。我仍然不想去掉名称空间,因为我希望XML保持不变,除了像上面的1那样更改foobarportal.version。在

当前的方法不知道XML,但实现了上面的12

  1. <foobarportal.version>(.*)</foobarportal.version>的Grep
  2. 把比赛组的内容加一
  3. 写回去。在

最好有一个支持XML的解决方案,因为它会更加健壮。ElementTree的XML名称空间处理使其更加复杂。在


Tags: orgproject名称httpversionapache空间description
1条回答
网友
1楼 · 发布于 2024-10-03 23:30:02

如果您的问题很简单:“如何按名称空间的元素名称进行搜索”,那么答案是lxml理解{namespace}语法,因此您可以:

tree.getroot().find('{http://maven.apache.org/POM/4.0.0}project')

相关问题 更多 >