簡體   English   中英

我如何解析python中的xml文件

[英]How can i parse a xml file in python

我有一個xml文件(基本上該文件是jenkins從屬config.xml文件),我必須從中獲取某些值。 因此,我嘗試使用Element Tree來解析xml文件,如下所示

tree = ET.parse(config.xml)
root = tree.getroot()
print root
for item in root.findall('slave'):

然后我將這個解析的xml文件保存在一個文本文件中,現在我想獲取此標記中的值,我可以通過bash但是我想知道如何在python中做到這一點bash代碼

cat test.xml | sed -n 's:.*<label>\(.*\)</label>.*:\1:p'

這是一個示例jenkins slave config.xml文件

<slave>
<name>some_name</name>
<description/>
<remoteFS>some_value</remoteFS>
<numExecutors>xx</numExecutors>
<mode>EXCLUSIVE</mode>
<retentionStrategy class="xxxx"/>
<launcher class="xxxxx" plugin="xxxxx">
    <host>xxx.x.x.xx</host>
    <port>xx</port>
    <credentialsId>xxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx</credentialsId>
    <maxNumRetries>0</maxNumRetries>
    <retryWaitTime>0</retryWaitTime>
    <sshHostKeyVerificationStrategy class="hudson.plugins.sshslaves.verifiers.NonVerifyingKeyVerificationStrategy/></launcher>
    <label>some_label</label>
</slave>

與標簽類似,我還需要其他值,例如主機名,端口等。

您可以使用.iter()進行遞歸迭代以查找元素。 檢查官方文檔

這是一個slave節點打印labelhost文本的示例。

更新 :將code.py修改為另外打印launcher標簽的class屬性值。 它使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM