0

ファイル「new.xml」からxmlタグを削除し、printステートメントに従ってデータを配置したいと思います。

私は試しました:

    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
4

1 に答える 1

1

XML ファイルの構造に従って解析する必要があります。このために、子をループして、それぞれのタグ名とテキストを確認できます。

from lxml import etree

tree = etree.parse("test.xml")
root = tree.getroot()

connections = []
for node in root.findall('rhel'): # for all the 'rhel' nodes, children of the root 'connections' node
    connections.append({info.tag: info.text for info in node}) # Construct a dictionary with the (tag, text) as (key, value) pair.

print connections

for conn in connections:
    print '='*20
    print """is it a new connection: {runscript}
username: {username}
password: {password}
value: {store}
connections: {port}
host: {host}
log dir : {logdirectory}""".format(**conn)

あなたがやっていた方法で、あなたは試すことができます: 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
于 2012-12-31T07:50:26.243 に答える