0

このxmlから情報を読み取るのに問題があります。

<entry number="50" date="2011-01-29">
 <name>Info text about account</name>
 <row account="1930" debit="0" credit="2051"/>
 <row account="1471" debit="410" credit="0"/>
 <row account="4404" debit="1641" credit="0"/>
</entry>

私はこのコードを使用します

def printInfoOfVerification():
    valFound = 0
        print("Now system will print information about a verification nr in xml:")
        val = input("Enter verification number: ")
    verificationNumbr = xmltree.iter('entry')
    for i in verificationNumbr:
        if (i.attrib['number']) == val:
                valFound = 1
                    print("Verification number:",val, "found")
                    print("Info about verification:")
                    print(i.attrib['date'])
            if valFound == 0:
                    print("Verification number not found:",val)

「val」が=50の場合、次のようになります。

Verification number: 50 found
Info about verification:
2011-01-29

しかし、問題は、タグ「name」の情報も出力したいので、この例では次のようになります。

Verification number: 50 found
Info about verification:
2011-01-29
Info text about account

xmltree.iter('name')やその他の方法で名前タグを読み込もうとしましたが、成功しませんでした:(これを行う方法を知っている人はいますか?Thx

4

2 に答える 2

1

Python 2.7.x で lxml を使用する私の個人的な選択。

from lxml import etree

data = """
<entry number="50" date="2011-01-29">
 <name>Info text about account</name>
 <row account="1930" debit="0" credit="2051"/>
 <row account="1471" debit="410" credit="0"/>
 <row account="4404" debit="1641" credit="0"/>
</entry>
"""

tree = etree.fromstring(data)
entry = tree.xpath('/entry[@number="49"]')
if not entry:
    print 'No entry found'

entry = tree.xpath('/entry[@number="50"]')[0]
print 'found'
print 'Info: {}'.format(entry.get('date'))
print entry.find('name').text
for row in entry.findall('row'):
    print 'account =', row.get('account') # etc...

出力:

No entry found
found
Info: 2011-01-29
Info text about account
account = 1930
account = 1471
account = 4404

可能な便利なルックアップ (番号を介してノードにすばやくアクセスするため):

lookup = dict( (int(node.get('number')), node) for node in tree.xpath('/entry') )

次に、次の方法でアクセスします。

lookup[50].findall('account')

等...

于 2012-06-20T16:49:31.177 に答える
0

助けてくれてありがとう!! ElementTree を使用してこの問題を解決する方法も見つけました。

Verification number: 50 found
Info about verification:
2011-01-29
Namn: Info text about account
Konto: 1930, Debit:     0, Kredit:  2051
Konto: 1471, Debit:   410, Kredit:     0
Konto: 4404, Debit:  1641, Kredit:     0

私が使用したコード:

def printInfoOfVerification():
        print("Now system will print information about a verification nr in xml:")
        val = input("Enter verification number: ")
        verificationNumbr = xmltree.iter('entry')
        for entry in verificationNumbr:
                if (entry.attrib['number']) == val:
                        valFound = 1
                        print("Verification number:",val, "found")
                        print("Info about verification:")
                        print(entry.attrib['date'])
                        findInfoAboutVerification(entry)
        if valFound == 0:
                print("Verification number not found:",val)


def findInfoAboutVerification(entry):
        verificationText = entry.iter()
        for node in verificationText:
                if "name" in node.tag:
                        print('Namn: %s' % node.text)
                if "comment" in node.tag:
                        print('Kommentar: %s' % node.text)
                if "row" in node.tag:
                        print('Konto: %s, Debit: %s, Kredit: %s' % (node.attrib['account'], node.attrib['debit'].rjust(5), node.attrib['credit'].rjust(5)))
于 2012-06-21T14:10:41.880 に答える