Làm thế nào tôi có thể yêu cầu ElementTree bỏ qua các không gian tên trong một tệp XML? Ví dụ: Tôi muốn truy vấn modelVersion
(như trong tuyên bố 1) thay vì {http://maven.apache.org/POM/4.0.0}modelVersion
(như trong tuyên bố 2).Python: bỏ qua các không gian tên trong xml.etree.ElementTree?
pom="""
<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>
</project>
"""
from xml.etree import ElementTree
ElementTree.register_namespace("","http://maven.apache.org/POM/4.0.0")
root = ElementTree.fromstring(pom)
print 1,root.findall('modelVersion')
print 2,root.findall('{http://maven.apache.org/POM/4.0.0}modelVersion')
1 []
2 [<Element '{http://maven.apache.org/POM/4.0.0}modelVersion' at 0x1006bff10>]
AFAIK không phải là cách dễ dàng + sạch sẽ o, đặc biệt là nếu bạn không có khả năng giao dịch với nhiều không gian tên. Có vẻ là một câu hỏi trùng lặp [ở đây] (http://stackoverflow.com/q/13412496/20670), nhưng tôi sẽ không sử dụng dupehammer của tôi nếu bạn nói rằng những cách tiếp cận đó sẽ không hoạt động cho bạn (chúng là loại trông giống như hacks bẩn với tôi). –
Ngoài ra, ['lxml' có thể đáng xem xét] (http://stackoverflow.com/q/14853243/20670), nhưng nó không phải là một phần của thư viện chuẩn. –
thật đáng tiếc là tôi đang gửi cho người không thể cài đặt lxml. Tôi hy vọng thư viện chuẩn kết hợp nó một ngày nào đó. Tôi đã đăng giải pháp hiện tại của mình khiến tôi rất buồn khi tôi nói với mẹ tôi rằng tôi là một lập trình viên chuyên nghiệp. : -/ –