创建循环以查找依赖项pom.xml文件使用python文件

2024-09-29 21:59:51 发布

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

我正在使用python创建一个函数,它可以接受pom.xml文件文件,然后从依赖项中返回groupId、artifactId和version。
我发现了以下pom.xml文件从https://www.javatpoint.com/maven-pom-xml显示我试图解析的结构。在

<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/xsd/maven-4.0.0.xsd">  

  <modelVersion>4.0.0</modelVersion>  

  <groupId>com.javatpoint.application1</groupId>  
  <artifactId>my-application1</artifactId>  
  <version>1.0</version>  
  <packaging>jar</packaging>  

  <name>Maven Quick Start Archetype</name>  
  <url>http://maven.apache.org</url>  

  <dependencies>  
    <dependency>  
      <groupId>junit</groupId>  
      <artifactId>junit</artifactId>  
      <version>4.8.2</version>  
    </dependency>  
  </dependencies>  
.
.
.
  <dependencies>  
    <dependency>  
      <groupId>abc</groupId>  
      <artifactId>def</artifactId>  
      <version>4.8.3</version>  
    </dependency>  
  </dependencies> 

</project>  

我试过使用minidom和etree.ElementTree但我对所有这些都是全新的,而且还没有取得进展。我也希望它能够处理pom.xml文件具有不同数量依赖关系的文件,所以我认为它必须是一个循环。根据其他stackoverflow响应,我得出的结论如下。在

^{pr2}$

有没有一种方法可以让它返回一个嵌套字典,其中包含依赖项及其信息,方法与此类似?在

^{3}$

Tags: 文件orgcomhttpversionapachewwwdependencies
1条回答
网友
1楼 · 发布于 2024-09-29 21:59:51

这可以通过使用几个库来完成:

pom= """[your xml above]"""

from lxml import etree
from collections import defaultdict

root = etree.fromstring(pom) #or .parse('pom.xml') if you read it from that file
tree = etree.ElementTree(root)

depend = tree.xpath("//*[local-name()='dependency']")
dependencyInfo = defaultdict(dict)

for dep in depend:
    infoList = []
    for child in dep.getchildren():
        infoList.append(child.tag.split('}')[1])
        infoList.append(child.text)


    dependencyInfo[infoList[1]].update({infoList[2] : infoList[3],infoList[4] : infoList[5]})

dependencyInfo

输出:

^{pr2}$

相关问题 更多 >

    热门问题