Tôi muốn thay thế các phần tử con từ cây này sang cây khác, dựa trên một số tiêu chí. Tôi có thể làm điều này bằng cách sử dụng hiểu? Nhưng làm thế nào để thay thế phần tử trong ElementTree?Làm thế nào tôi có thể thay thế một phần tử con trong ElementTree
5
A
Trả lời
2
Bạn không thể thay thế một phần tử từ ElementTree
bạn chỉ có thể làm việc với Element
.
Ngay cả khi bạn gọi ElementTree.find()
, đó chỉ là phím tắt cho getroot().find()
.
Vì vậy, bạn thực sự cần phải:
- trích xuất các yếu tố phụ huynh
- sử dụng sự hiểu biết (hoặc bất cứ điều gì bạn muốn) trên đó yếu tố phụ huynh
Việc khai thác các yếu tố phụ huynh có thể dễ dàng nếu mục tiêu của bạn là một phần tử con gốc (chỉ cần gọi getroot()
) nếu không bạn sẽ phải tìm nó.
2
1
Tôi mới để trăn, nhưng tôi đã tìm ra một cách tinh ranh để làm điều này:
Input tập tin input1.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<import ref="input2.xml" />
<name awesome="true">Chuck</name>
</root>
tập tin đầu vào input2.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>blah blah</bar>
</foo>
Python mã: (lưu ý, lộn xộn và hacky)
import os
import xml.etree.ElementTree as ElementTree
def getElementTree(xmlFile):
print "-- Processing file: '%s' in: '%s'" %(xmlFile, os.getcwd())
xmlFH = open(xmlFile, 'r')
xmlStr = xmlFH.read()
et = ElementTree.fromstring(xmlStr)
parent_map = dict((c, p) for p in et.getiterator() for c in p)
# ref: https://stackoverflow.com/questions/2170610/access-elementtree-node-parent-node/2170994
importList = et.findall('.//import[@ref]')
for importPlaceholder in importList:
old_dir = os.getcwd()
new_dir = os.path.dirname(importPlaceholder.attrib['ref'])
shallPushd = os.path.exists(new_dir)
if shallPushd:
print " pushd: %s" %(new_dir)
os.chdir(new_dir) # pushd (for relative linking)
# Recursing to import element from file reference
importedElement = getElementTree(os.path.basename(importPlaceholder.attrib['ref']))
# element replacement
parent = parent_map[importPlaceholder]
index = parent._children.index(importPlaceholder)
parent._children[index] = importedElement
if shallPushd:
print " popd: %s" %(old_dir)
os.chdir(old_dir) # popd
return et
xmlET = getElementTree("input1.xml")
print ElementTree.tostring(xmlET)
cho kết quả:
-- Processing file: 'input1.xml' in: 'C:\temp\testing'
-- Processing file: 'input2.xml' in: 'C:\temp\testing'
<root>
<foo>
<bar>blah blah</bar>
</foo><name awesome="true">Chuck</name>
</root>
này đã được ký kết với thông tin từ:
Các vấn đề liên quan
- 1. Làm thế nào để có được tất cả các phần tử con của cây phần tử với Python ElementTree?
- 2. Trong SimpleXML, làm thế nào tôi có thể thêm một SimpleXMLElement hiện có làm phần tử con?
- 3. Làm thế nào tôi có thể nhận được một con trỏ đến phần tử đầu tiên trong một std :: vector?
- 4. BeautifulSoup: Làm cách nào để thay thế giá trị trong phần tử có thẻ phần tử?
- 5. Trong Perl, làm thế nào tôi có thể lặp qua nhiều phần tử của một mảng?
- 6. Trong jQuery, làm thế nào tôi có thể chọn một phần tử ẩn?
- 7. Toán tử thay thế Perl có thể khớp với một phần tử trong một mảng không?
- 8. Làm cách nào để thay thế một phần tử?
- 9. jQuery: Làm thế nào tôi có thể phát hiện nếu html đã thay đổi trong một phần tử đã cho?
- 10. làm thế nào để có được mảng con của một phần tử trong jquery
- 11. Chèn phần tử xml làm con đầu tiên sử dụng ElementTree trong python
- 12. Làm cách nào để tôi có thể chặn con rối trước khi thay thế một tệp?
- 13. .NET URI: Làm thế nào tôi có thể thay đổi MỘT phần của một URI?
- 14. Có thể thay thế nút asp: bằng phần tử HTML
- 15. Làm thế nào tôi có thể ngừng serialization JSON .net tham chiếu các phần tử trước?
- 16. Thay thế một phần tử trong một mảng đối tượng
- 17. lxml chuyển đổi phần tử thành elementtree
- 18. Làm cách nào để thay thế phần tử của mảng?
- 19. Làm thế nào tôi có thể bắt đầu ra từ một con cá chép trong Perl?
- 20. Chỉ số phần tử ElementTree tra cứu
- 21. Làm thế nào tôi có thể thay thế chuỗi trong một bản ghi nhớ (FastReport)?
- 22. Tôi có thể lấy n phần tử ngẫu nhiên từ một mảng Perl như thế nào?
- 23. .net serialization XML: làm thế nào để xác định phần tử gốc và phần tử con tên của một mảng
- 24. Làm thế nào tôi có thể nhận được mọi phần tử thứ hai nếu mỗi phần tử được nhúng vào một phần tử khác?
- 25. Làm cách nào để thay thế phần tử bằng tiện ích GWT của tôi?
- 26. R: Làm thế nào để thay thế các phần tử của một data.frame?
- 27. thay thế các phần tử chéo trong một mảng
- 28. PHP DOM thay thế phần tử bằng phần tử mới
- 29. Làm thế nào tôi có thể tham khảo một appSetting trong một phần khác của web.config
- 30. Làm thế nào tôi có thể trả về json trên một phần xem trong MVC?
này có thể giúp: http://stackoverflow.com/q/4788633/535275 –