Chcę zastąpić elementy podrzędne z jednego drzewa na inny, w oparciu o pewne kryteria. Czy mogę to zrobić za pomocą Zrozumienia? Ale jak zastąpić element w ElementTree?Jak można zastąpić element (y) potomny w ElementTree
5
A
Odpowiedz
2
Nie można zastąpić elementu z ElementTree
można pracować tylko z Element
. To jest tylko skrót od getroot().find()
.
Tak naprawdę trzeba:
- wyodrębnić elementu nadrzędnego
- korzystanie ze zrozumieniem (lub cokolwiek chcesz) tego elementu nadrzędnego
Ekstrakcja elementu nadrzędnego może być łatwe jeśli twój cel jest podstawowym podelementem (wystarczy zadzwonić pod numer getroot()
), w przeciwnym razie musisz go znaleźć.
2
1
Jestem nowy w Pythonie, ale znalazłem sprytny sposób, aby to zrobić:
pliku wejściowego input1.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<import ref="input2.xml" />
<name awesome="true">Chuck</name>
</root>
pliku wejściowego input2.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>blah blah</bar>
</foo>
Python kod: (uwaga, niechlujny i hakowaty)
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)
daje wyjście:
-- 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>
ta została zawarta z informacjami z:
Powiązane problemy
- 1. Jak wyświetlić element potomny, gdy inny element potomny jest przepełniony przy użyciu JQuery
- 2. Nie można zrzucić lub napisać elementu ElementTree
- 3. Utwórz element potomny na zewnątrz rodzica
- 4. Python ElementTree: Analizowanie ciąg i uzyskiwanie instancji ElementTree
- 5. Jak znaleźć pierwszy bezpośredni element potomny elementu div?
- 6. Zastąpić cały element zamiast innerHTML?
- 7. Angular2: Wstaw komponent dynamiczny jako element potomny kontenera w DOM
- 8. Jak można zastąpić przekierowanie funkcji w bash?
- 9. Czy można zastąpić & z bitand w odniesieniach?
- 10. jQuery wybierz element potomny według klasy o nieznanej ścieżce
- 11. Pokaż element potomny nad elementem nadrzędnym za pomocą CSS
- 12. Po kliknięciu dodaj element potomny z polem wprowadzania, np. Drzewo
- 13. Jak ustawić pole tekstowe ElementTree w konstruktorze?
- 14. Angular 2 element potomny odnosi się do komponentu nadrzędnego
- 15. jquery lub JS utwórz element potomny i przypisz ID
- 16. elementtree błąd nazw rejestr
- 17. Jak wyśrodkować element potomny w CSS, nawet jeśli jest większy niż nadrzędny?
- 18. WPF Pobierz element (y) pod mysz
- 19. Czy można zastąpić zachowanie%% za pomocą __rmod__?
- 20. Nie można zastąpić onCreateOptionsMenu w ListFragment
- 21. Leiningen - jak zabić proces potomny?
- 22. Jak odłączyć proces potomny w skrypcie Node.js?
- 23. Jak zastąpić element Xsd wewnątrz elementu nadrzędnego/rozszerzonego
- 24. Nie można zastąpić nagłówka zawartości w s3
- 25. Jak regex zastąpić element grupy mecz z wynikiem metody
- 26. można file.renameAby zastąpić istniejący plik?
- 27. Czy można zastąpić wartości w zapytaniu SQL?
- 28. gsub w Lua. Nie można zastąpić wzoru
- 29. czy można zastąpić metodę w czasie wykonywania?
- 30. Czy można zastąpić egzekucje w maven pluginManagement?
To może pomóc: http://stackoverflow.com/q/4788633/535275 –