【问题标题】:searching and editing an XML file using python使用 python 搜索和编辑 XML 文件
【发布时间】:2015-07-06 16:17:49
【问题描述】:

尝试在 xml 文件中搜索此 xml 文件中所有标记中的文本时遇到问题。 python脚本需要能够将每个版本标签的最后一个数字增加1,例如2.22.0.4 变成 2.22.0.5

谁能给我概述一下执行此任务所需的 Python 代码类型?

这里是xml:

    <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>

【问题讨论】:

标签: python xml file lxml elementtree


【解决方案1】:

如果您的目标节点只有version,您可以简单地循环遍历tree 并即时编辑text 属性,就像在我的示例代码中这样(我使用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)
   ...:

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>

找到version 节点后,只需将.text 属性分配给新值——我只是将其除以. 并增加最后一部分,然后将它们重新连接起来。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多