Tôi có một tập tin pom mà có định nghĩa sau đây:Reading Maven Pom xml bằng Python
<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>4.0.0</modelVersion>
<groupId>org.welsh</groupId>
<artifactId>my-site</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<profiles>
<profile>
<build>
<plugins>
<plugin>
<groupId>org.welsh.utils</groupId>
<artifactId>site-tool</artifactId>
<version>1.0</version>
<executions>
<execution>
<configuration>
<mappings>
<property>
<name>homepage</name>
<value>/content/homepage</value>
</property>
<property>
<name>assets</name>
<value>/content/assets</value>
</property>
</mappings>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Và tôi đang tìm kiếm để xây dựng một từ điển ra khỏi name
& value
yếu tố dưới property
dưới các yếu tố mappings
. Vì vậy, những gì tôi đang cố gắng tìm hiểu làm thế nào để có được tất cả các yếu tố có thể mappings
(Incase của nhiều cấu hình xây dựng) để tôi có thể nhận được tất cả các yếu tố property
và đọc từ Supported XPath syntax sau đây sẽ in ra tất cả các văn bản có thể/các yếu tố giá trị:
import xml.etree.ElementTree as xml
pomFile = xml.parse('pom.xml')
root = pomFile.getroot()
for mapping in root.findall('*/mappings'):
for prop in mapping.findall('.//property'):
logging.info(prop.find('name').text + " => " + prop.find('value').text)
Không trả lại giá trị nào. Tôi đã cố gắng chỉ cần in ra tất cả các mappings
yếu tố và nhận được:
>>> print root.findall('*/mappings')
[]
Và khi tôi in ra tất cả mọi thứ từ root
tôi nhận được:
>>> print root.findall('*')
[<Element '{http://maven.apache.org/POM/4.0.0}modelVersion' at 0x10b38bd50>, <Element '{http://maven.apache.org/POM/4.0.0}groupId' at 0x10b38bd90>, <Element '{http://maven.apache.org/POM/4.0.0}artifactId' at 0x10b38bf10>, <Element '{http://maven.apache.org/POM/4.0.0}version' at 0x10b3900d0>, <Element '{http://maven.apache.org/POM/4.0.0}packaging' at 0x10b390110>, <Element '{http://maven.apache.org/POM/4.0.0}name' at 0x10b390150>, <Element '{http://maven.apache.org/POM/4.0.0}properties' at 0x10b390190>, <Element '{http://maven.apache.org/POM/4.0.0}build' at 0x10b390310>, <Element '{http://maven.apache.org/POM/4.0.0}profiles' at 0x10b390390>]
Mà làm cho tôi cố gắng in:
>>> print root.findall('*/{http://maven.apache.org/POM/4.0.0}mappings')
[]
Nhưng điều đó cũng không hiệu quả.
Mọi đề xuất sẽ tuyệt vời.
Cảm ơn,
tôi thấy ý chính này mà làm việc cho tôi và làm cho nó một chút ít tiết: https://gist.github.com/kennedyj/1895332 – borism