Theo mặc định, khi bạn gọi ElementTree.parse (someXMLfile) các tiền tố thư viện Python ElementTree mỗi nút phân tích cú pháp với nó là namespace URI trong Notation của Clark:Alter namespace tiền tố với ElementTree bằng Python
{http://example.org/namespace/spec}mynode
Điều này làm cho việc truy cập các nút cụ thể bằng tên một nỗi đau lớn sau này trong mã.
Tôi đã đọc qua các tài liệu về ElementTree và không gian tên và có vẻ như chức năng iterparse()
sẽ cho phép tôi thay đổi cách trình phân tích cú pháp tiền tố không gian tên, nhưng đối với cuộc sống của tôi, tôi thực sự không thể thay đổi tiền tố . Nó có vẻ như có thể xảy ra ở chế độ nền trước khi sự kiện ns-start thậm chí cháy như trong ví dụ này:
for event, elem in iterparse(source):
if event == "start-ns":
namespaces.append(elem)
elif event == "end-ns":
namespaces.pop()
else:
...
Làm thế nào để làm cho nó thay đổi hành vi prefixing và điều thích hợp để trở lại khi các chức năng đầu là những gì ?
thú vị. Tôi cũng rất muốn biết. Cách tôi tiến hành là tạo ra "hằng số" XHTML_NS = '{http://www.w3.org/1999/xhtml}' và sau đó sử dụng trong mã XHTML_NS + "mynode" – karlcow
Bạn có thể giải thích những gì bạn đang thực sự cố gắng đạt được ? Tại sao ký hiệu của Clark lại là một nỗi đau lớn? –
Tôi đang cố gắng tích hợp với mã hiện có truy cập mọi thứ theo tiền tố ban đầu của họ (tức là 'openSearch', thay vì' {http://a9.com/-/spec/opensearchrss/1.0/} ') và tôi đã hy vọng có một cách đẹp hơn việc tạo loại bản đồ tiền tố mà @karlcow đề cập đến. –