Trong phạm vi lxml, có thể cho một phần tử, di chuyển toàn bộ nội dung ở nơi khác trong tài liệu xml mà không phải đọc tất cả các con của nó và tạo lại không? Ví dụ tốt nhất của tôi sẽ thay đổi cha mẹ. Tôi đã lục lọi quanh các tài liệu một chút nhưng không có nhiều may mắn. Cảm ơn trước!Di chuyển toàn bộ phần tử bằng lxml.etree
7
A
Trả lời
14
.append
, .insert
và các hoạt động khác làm điều đó theo mặc định
>>> from lxml import etree
>>> tree = etree.XML('<a><b><c/></b><d><e><f/></e></d></a>')
>>> node_b = tree.xpath('/a/b')[0]
>>> node_d = tree.xpath('/a/d')[0]
>>> node_d.append(node_b)
>>> etree.tostring(tree) # complete 'b'-branch is now under 'd', after 'e'
'<a><d><e><f/></e><b><c/></b></d></a>'
>>> node_f = tree.xpath('/a/d/e/f')[0] # Nothing stops us from moving it again
>>> node_f.append(node_a) # Now 'a' is deep under 'f'
>>> etree.tostring(tree)
'<a><d><e><f><b><c/></b></f></e></d></a>'
Hãy cẩn thận khi di chuyển các nút có một văn bản đuôi. Trong văn bản đuôi lxml thuộc về nút và di chuyển xung quanh nó. (Ngoài ra, khi bạn xóa một nút, văn bản đuôi của nó cũng bị xóa)
>>> tree = etree.XML('<a><b><c/></b>TAIL<d><e><f/></e></d></a>')
>>> node_b = tree.xpath('/a/b')[0]
>>> node_d = tree.xpath('/a/d')[0]
>>> node_d.append(node_b)
>>> etree.tostring(tree)
'<a><d><e><f/></e><b><c/></b>TAIL</d></a>'
Đôi khi đó là một hiệu quả mong muốn, nhưng đôi khi bạn sẽ cần một cái gì đó như thế:
>>> tree = etree.XML('<a><b><c/></b>TAIL<d><e><f/></e></d></a>')
>>> node_b = tree.xpath('/a/b')[0]
>>> node_d = tree.xpath('/a/d')[0]
>>> node_a = tree.xpath('/a')[0]
>>> # Manually move text
>>> node_a.text = node_b.tail
>>> node_b.tail = None
>>> node_d.append(node_b)
>>> etree.tostring(tree)
>>> # Now TAIL text stays within its old place
'<a>TAIL<d><e><f/></e><b><c/></b></d></a>'
0
Bạn có thể sử dụng .append()
, .insert()
phương pháp để thêm một subelement tới phần tử hiện có:
>>> from lxml import etree
>>> from_ = etree.fromstring("<from/>")
>>> to = etree.fromstring("<to/>")
>>> to.append(from_)
>>> etree.tostring(to)
'<to><from/></to>'
Các vấn đề liên quan
- 1. Làm cách nào để di chuyển toàn bộ phần tử div lên x pixel?
- 2. Di chuyển chuột trên phần tử
- 3. Cách di chuyển phần tử HTML
- 4. Phần tử di chuyển JavaScript trong DOM
- 5. lxml chuyển đổi phần tử thành elementtree
- 6. Có an toàn khi di chuyển các phần tử của danh sách khởi tạo không?
- 7. CSS: Tạo thành phần tử khối lấp đầy toàn bộ không gian của phần tử gốc?
- 8. Cách di chuyển phần tử con từ cha mẹ này sang phần tử khác bằng cách sử dụng jQuery
- 9. Di chuyển phần tử như vảy tuyết rơi
- 10. Chủ đề an toàn unique_ptr di chuyển
- 11. CSS: xóa toàn bộ phần tử khi bị cắt bớt
- 12. bộ lọc phần tử jquery bằng css
- 13. Di chuyển các phần tử Python giữa các danh sách
- 14. Phần tử DOM di chuyển jQuery bên trong parent
- 15. Di chuyển phần tử DOM có nối thêm()?
- 16. Ẩn phần tử hoặc tạo khi đang di chuyển?
- 17. Di chuyển toàn bộ từ chỉ với Java
- 18. jQuery, nhận html của toàn bộ phần tử
- 19. Đọc toàn bộ các phần tử từ luồng mạng XML
- 20. Thay thế toàn bộ phần tử thay vì innerHTML?
- 21. Thay thế các phần tử bằng lxml.html
- 22. UITableView Di chuyển đến phần
- 23. Di chuyển phần tử hoạt động mất sự kiện di chuột trong trình khám phá internet
- 24. Làm thế nào để đồng bộ hóa độ lệch cuộn của hai phần tử khi di chuyển quán tính
- 25. CSS - Di chuột qua các phần tử để kích hoạt di chuột trên phần tử được bao phủ
- 26. PHP: Di chuyển phần tử kết hợp thành phần bắt đầu của mảng
- 27. ngăn di chuyển toàn trang iOS
- 28. CSS: di chuột qua phần tử khác?
- 29. Thực hiện Di chuyển Constructor bằng cách gọi Di chuyển Nhà điều hành Chuyển nhượng
- 30. Chuyển phần tử đến cuối mảng
Chính xác những gì tôi cần. Cảm ơn! – Cryptite
Loại-o ?: node_a phải là node_b trên dòng "node_f.append (node_a) # Bây giờ 'a' nằm sâu dưới 'f'" (cũng sửa bình luận 'a') –