2012-12-31 143 views
0

我想從文件「new.xml」中刪除xml標籤並根據print語句放置數據。用lxml刪除xml標籤

我曾嘗試用:

from lxml import etree 

    tree = etree.parse("C:\\Users\\name\\Desktop\\new.xml") 
    root = tree.getroot()  
    for text in root.iter(): 
     print text.text 

XML代碼:

<connection> 
<rhel> 

<runscript>y</runscript> 
<username>useranme</username> 
<password>passw</password> 
<store>None</store> 
<port>2</port> 
<host>192.168.73.56</host> 
<logdirectory>logs</logdirectory> 
</rhel> 

</connection> 

我得到的輸出如下:

yes 
username 
passw 
None 
2 
192.168.73.56 
logs 

但我想打印爲:

is it a new connection: yes 
username: username 
password: passw 
value: none 
connections: 2 
host: 192.168.73.56 
log dir : logs 
+1

XML文件是什麼樣子的?用輸出的 – jadkik94

+0

我們不能逐行取值? –

+1

我不認爲依靠*那*輸出是一件好事。它只是根的代表,而不是推薦的訪問XML文件的方式。另外,爲了讓人們更好地幫助你,請給他們一些東西來測試你的代碼。 – jadkik94

回答

1

您需要根據XML文件的結構進行解析。爲此,您可以對孩子進行循環,並查看每個孩子的標籤名稱和文本。您可以嘗試:repr(root)。你會得到正在打印的內容。但不推薦使用,原因很多:

  1. 輸出不能保證按現在的順序排列。
  2. 這不是XML文件的結構。
  3. 有很多空白行,它預計會是這樣。
  4. 這只是不是你如何解析XML :)

希望它能幫助。

更新

您可以使用connections.append(dict((info.tag, info.text) for info in node))不是其他線爲Python < 2.7。在我猜測之前,這個表示法不被支持。

或者,最終,你能做到這樣:

c = {} 
for info in node: 
    c[info.tag] = info.text 
connections.append(c) 

此外,如果在Python 2.6中,我猜的格式可能不太正常工作。用舊的字符串格式替換它:

print """is it a new connection: %(runscript)s 
username: %(username)s 
password: %(password)s 
value: %(store)s 
connections: %(port)s 
host: %(host)s 
log dir : %(logdirectory)s""" % conn 
+0

我收到此錯誤:connections.append({info.tag:info.text for info in node})#構造一個dic 與(tag ,文本)作爲(鍵,值)對。 ^ SyntaxError:無效的語法 –

+0

它必須與您使用的版本有關。我會更新我的回答 – jadkik94

+0

我正在使用python2.6 –