簡體   English   中英

我的Python無法正確讀取XML

[英]My Python isn't reading the XML correctly

這是我訪問XML文件的python代碼:

import xml.etree.ElementTree as ET

def display_book(book):

    root = ET.parse(source="library.xml")

    info = root.iter("catalog")

    for elem in info:
        name = elem.find("book").attrib['id']

        if name == book:
            print(name)

    return "Book Not Found"

#Main
display_book("bk105")

這是XML代碼的示例:

<catalog>
    <book id="bk101">
        <author>Gambardella, Matthew</author>
        <title>XML Developer's Guide</title>
        <genre>Computer</genre>
        <price>44.95</price>
        <publish_date>2000-10-01</publish_date>
        <description>
              An in-depth look at creating applications with XML.
        </description>
    </book>
    <book id="bk102">
        <author>Ralls, Kim</author>
        <title>Midnight Rain</title>
        <genre>Fantasy</genre>
        <price>5.95</price>
        <publish_date>2000-12-16</publish_date>
        <description>
              A former architect battles corporate zombies, an evil sorceress,                         
              and her own childhood to become queen of the world.
        </description>
    </book>
</catalog>

這些書從“ bk101”到“ bk112”,並且代碼僅將“ bk101”的ID查找為第一本書,而不是遍歷每個書ID並將其與輸入交叉引用,因此程序從不輸出任何內容。 甚至沒有“找不到書”。

elem.find("book")僅返回目錄中的第一本書。 您需要使用elem.findall("book") ,然后對其進行迭代。

但是您可以只使用root.iter("book")直接遍歷這些書。

for elem in root.iter("book"):
    name = elem.attrib('id')
    if name == book:
        print(name)
else:
    print("Book not found")

您還應該將錯誤消息放在else:塊中。 否則即使找到該書也將被退還。

您可以切換為使用findall

import xml.etree.ElementTree as ET

def display_book():

    root = ET.parse(source="library.xml")

    info = root.iter("catalog")

    for elem in info:
        books = elem.findall("book")
        for book in books:
            print book.attrib['id']


# Main
display_book()

暫無
暫無

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

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