久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

使用 LXML 和 Python 解析空白 XML 標(biāo)簽

Parsing blank XML tags with LXML and Python(使用 LXML 和 Python 解析空白 XML 標(biāo)簽)
本文介紹了使用 LXML 和 Python 解析空白 XML 標(biāo)簽的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

當(dāng)解析XML文檔格式為:

When parsing XML documents in the format of:

<Car>
    <Color>Blue</Color>
    <Make>Chevy</Make>
    <Model>Camaro</Model>
</Car>

我使用以下代碼:

carData = element.xpath('//Root/Foo/Bar/Car/node()[text()]')
parsedCarData = [{field.tag: field.text for field in carData} for action in carData]
print parsedCarData[0]['Color'] #Blue

如果標(biāo)簽為空,則此代碼將不起作用,例如:

This code will not work if a tag is empty such as :

<Car>
    <Color>Blue</Color>
    <Make>Chevy</Make>
    <Model/>
</Car>

使用與上面相同的代碼:

Using the same code as above:

carData = element.xpath('//Root/Foo/Bar/Car/node()[text()]')
parsedCarData = [{field.tag: field.text for field in carData} for action in carData]
print parsedCarData[0]['Model'] #Key Error

我將如何解析這個(gè)空白標(biāo)簽.

How would I parse this blank tag.

推薦答案

您正在放入一個(gè) [text()] 過(guò)濾器,該過(guò)濾器僅顯式詢問(wèn)具有文本節(jié)點(diǎn)的元素...然后當(dāng)它沒(méi)有給你沒(méi)有文本節(jié)點(diǎn)的元素時(shí)你會(huì)不高興?

You're putting in a [text()] filter which explicitly asks only for elements which have text nodes them... and then you're unhappy when it doesn't give you elements without text nodes?

去掉那個(gè)過(guò)濾器,你會(huì)得到你的模型元素:

Leave that filter out, and you'll get your model element:

>>> s='''
... <root>
...   <Car>
...     <Color>Blue</Color>
...     <Make>Chevy</Make>
...     <Model/>
...   </Car>
... </root>'''
>>> e = lxml.etree.fromstring(s)
>>> carData = e.xpath('Car/node()')
>>> carData
[<Element Color at 0x23a5460>, <Element Make at 0x23a54b0>, <Element Model at 0x23a5500>]
>>> dict(((e.tag, e.text) for e in carData))
{'Color': 'Blue', 'Make': 'Chevy', 'Model': None}

也就是說(shuō)——如果你的直接目標(biāo)是遍歷樹(shù)中的節(jié)點(diǎn),你可以考慮使用 lxml.etree.iterparse() 代替,這將避免嘗試構(gòu)建完整的 DOM樹(shù)在內(nèi)存中,否則比構(gòu)建樹(shù)然后使用 XPath 對(duì)其進(jìn)行迭代要高效得多.(想想 SAX,但沒(méi)有瘋狂和痛苦的 API).

That said -- if your immediate goal is to iterate over the nodes in the tree, you might consider using lxml.etree.iterparse() instead, which will avoid trying to build a full DOM tree in memory and otherwise be much more efficient than building a tree and then iterating over it with XPath. (Think SAX, but without the insane and painful API).

使用 iterparse 實(shí)現(xiàn)可能如下所示:

Implementing with iterparse could look like this:

def get_cars(infile):
    in_car = False
    current_car = {}
    for (event, element) in lxml.etree.iterparse(infile, events=('start', 'end')):
        if event == 'start':
            if element.tag == 'Car':
                in_car = True
                current_car = {}
            continue
        if not in_car: continue
        if element.tag == 'Car':
            yield current_car
            continue
        current_car[element.tag] = element.text

for car in get_cars(infile = cStringIO.StringIO('''<root><Car><Color>Blue</Color><Make>Chevy</Make><Model/></Car></root>''')):
  print car

...這是更多代碼,但是(如果我們不使用 StringIO 作為示例)它可以處理比內(nèi)存容量大得多的文件.

...it's more code, but (if we weren't using StringIO for the example) it could process a file much larger than could fit in memory.

這篇關(guān)于使用 LXML 和 Python 解析空白 XML 標(biāo)簽的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Troubles while parsing with python very large xml file(使用 python 解析非常大的 xml 文件時(shí)出現(xiàn)問(wèn)題)
Find all nodes by attribute in XML using Python 2(使用 Python 2 在 XML 中按屬性查找所有節(jié)點(diǎn))
Python - How to parse xml response and store a elements value in a variable?(Python - 如何解析 xml 響應(yīng)并將元素值存儲(chǔ)在變量中?)
How to get XML tag value in Python(如何在 Python 中獲取 XML 標(biāo)記值)
How to correctly parse utf-8 xml with ElementTree?(如何使用 ElementTree 正確解析 utf-8 xml?)
Parse XML from URL into python object(將 XML 從 URL 解析為 python 對(duì)象)
主站蜘蛛池模板: av基地网| 国产综合视频 | 日日夜夜狠狠操 | 一区二区小视频 | 欧美一级淫片免费视频魅影视频 | 美女无遮挡网站 | 日本黄色免费看 | 欧美一区二区三区在线观看 | 国产黄色免费看 | 国产精品视频一区二区三区 | 亚洲三级在线 | 久久av网 | 人人草在线视频 | 日韩在线观看一区 | 日本一区二区高清 | 欧美亚洲天堂 | 日韩精品网| 国产h在线 | 久久av免费观看 | 久久伊人热 | 日韩视频免费看 | 亚洲免费a | 91丝袜一区在线观看 | 可以在线观看的av | 国产精品一区在线播放 | 国产成人精品一区 | 国产免费一区 | 免费网站观看www在线观看 | 手机看片欧美 | 日韩免费一区二区三区 | 十八岁毛片 | 精品国产一区二区三 | 亚洲区在线 | 精品免费在线 | 日本一区二区不卡视频 | 黄色片视频免费 | 欧美一区二区在线播放 | 国产一区中文字幕 | 欧美日韩中文字幕在线观看 | 亚洲天堂男人 | xxxxx黄色|