使用python搜索和编辑XML文件
我在试图通过xml文件搜索该xml文件中所有标记中的文本时遇到了问题。python脚本需要能够将每个版本标记的最后一个数字增加1,例如2.22.0.4变为2.22.0.5 有人能给我一个执行这个任务所需的python代码类型的概要吗 以下是xml:使用python搜索和编辑XML文件,python,xml,file,lxml,elementtree,Python,Xml,File,Lxml,Elementtree,我在试图通过xml文件搜索该xml文件中所有标记中的文本时遇到了问题。python脚本需要能够将每个版本标记的最后一个数字增加1,例如2.22.0.4变为2.22.0.5 有人能给我一个执行这个任务所需的python代码类型的概要吗 以下是xml: <build> <defaultGoal>deploy</defaultGoal> <plugins> <plugin> <groupId>mygroupid
<build>
<defaultGoal>deploy</defaultGoal>
<plugins>
<plugin>
<groupId>mygroupid</groupId>
<artifactId>my_plugin</artifactId>
<version>9.9</version>
<executions>
<execution>
<id>unpack</id>
<phase>process</phase>
<goals>
<goal>unpack</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.0.11.29</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.1.9.10</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.19.9.10</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.1.9.9</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.1.9.10</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.5.9.10</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.15.29.10</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</plugin>
</plugins>
部署
mygroupid
我的插件
9.9
打开
过程
打开
mygroupid
我的文件
0.0.11.29
拉链
.
mygroupid
我的文件
0.1.9.10
拉链
.
mygroupid
我的文件
0.19.9.10
拉链
.
mygroupid
我的文件
0.1.9.9
拉链
.
mygroupid
我的文件
0.1.9.10
拉链
.
mygroupid
我的文件
0.5.9.10
拉链
.
mygroupid
我的文件
0.15.29.10
拉链
.
如果您的目标节点只是
版本
,您可以简单地在树中循环
并动态编辑文本
属性,就像我的示例代码中那样(我使用lxml
),其他库应该相当类似:
In [1]: import lxml.etree as et
In [2]: root = et.parse("sample.xml")
In [3]: tree = root.getroot()
In [4]: for node in tree.iter("version"):
...: v = node.text
...: v = v.split(".")
...: if len(v) > 1: # make sure version does exist in node
...: node.text = '.'.join(v[:-1]) + '.' + str(int(v[-1]) + 1)
...:
[5]中的
:打印et.tostring(树)
部署
mygroupid
我的插件
9.10
打开
过程
打开
mygroupid
我的文件
0.0.11.30
拉链
.
mygroupid
我的文件
0.1.9.11
拉链
.
mygroupid
我的文件
0.19.9.11
拉链
.
mygroupid
我的文件
0.1.9.10
拉链
.
mygroupid
我的文件
0.1.9.11
拉链
.
mygroupid
我的文件
0.5.9.11
拉链
.
mygroupid
我的文件
0.15.29.11
拉链
.
找到version
节点后,只需将.text
属性指定给新值——我只需按
将其拆分,并增加最后一部分,然后将它们合并回来
希望这有帮助。试试看
In [5]: print et.tostring(tree)
<build>
<defaultGoal>deploy</defaultGoal>
<plugins>
<plugin>
<groupId>mygroupid</groupId>
<artifactId>my_plugin</artifactId>
<version>9.10</version>
<executions>
<execution>
<id>unpack</id>
<phase>process</phase>
<goals>
<goal>unpack</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.0.11.30</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.1.9.11</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.19.9.11</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.1.9.10</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.1.9.11</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.5.9.11</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>mygroupid</groupId>
<artifactId>myfile</artifactId>
<version>0.15.29.11</version>
<type>zip</type>
<outputDirectory>.</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</plugin>
</plugins>
</build>