Есть хорошо сохранившиеся библиотеки, которые уже делают это. Одним из примеров в реестре npm является слияние
Вы можете выполнять рекурсивную итерацию, используя .iter()
для поиска элементов. Проверьте официальную документацию .
Вот пример для печати текста label
и host
из узла slave
.
Обновление : code.py
модифицируется для дополнительной печати значения атрибута class
тега launcher
. Он использует element.attrib
для получения атрибутов тега. Больше можно найти в официальной документации парсинга XML .
test.xml
:
<slave>
<name>some_name</name>
<description/>
<remoteFS>some_value</remoteFS>
<numExecutors>xx</numExecutors>
<mode>xxx</mode>
<retentionStrategy class="xxxx"/>
<launcher class="xxxxx" plugin="xxxxx">
<host>xxx.x.x.xx</host>
<port>xx</port>
<credentialsId>xxxxxxxx</credentialsId>
<maxNumRetries>x</maxNumRetries>
<retryWaitTime>x</retryWaitTime>
<sshHostKeyVerificationStrategy class="hudson.plugins.sshslaves.verifiers.NonVerifyingKeyVerificationStrategy"/>
</launcher>
<label>somelabel</label>
</slave>
code.py
:
import xml.etree.ElementTree as ET
tree = ET.parse("test.xml")
root = tree.getroot()
for item in root.iter('slave'):
for label in item.iter("label"):
print label.text
for host in item.iter("host"):
print host.text
for launcher in item.iter("launcher"):
print launcher.attrib["class"]
Выход:
somelabel
xxx.x.x.xx
xxxxx