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

在 Python 中使用 ElementTree 解析帶有命名空間的

Parsing XML with namespaces using ElementTree in Python(在 Python 中使用 ElementTree 解析帶有命名空間的 XML)
本文介紹了在 Python 中使用 ElementTree 解析帶有命名空間的 XML的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有一個xml,它的一小部分看起來像這樣:

I have an xml, small part of it looks like this:

<?xml version="1.0" ?>
<i:insert xmlns:i="urn:com:xml:insert" xmlns="urn:com:xml:data">
  <data>
    <image imageId="1"></image>
    <content>Content</content>
  </data>
</i:insert>

當我使用 ElementTree 解析它并將其保存到一個文件中時,我看到以下內容:

When i parse it using ElementTree and save it to a file i see following:

<ns0:insert xmlns:ns0="urn:com:xml:insert" xmlns:ns1="urn:com:xml:data">
  <ns1:data>
    <ns1:image imageId="1"></ns1:image>
    <ns1:content>Content</ns1:content>
  </ns1:data>
</ns0:insert>

為什么它會改變前綴并將它們放在任何地方?使用 minidom 我沒有這樣的問題.配置好了嗎?ElementTree 的文檔很差.問題是,在這樣的解析之后我找不到任何節點,例如 image - 如果我像 {namespace}image 或只是 image.為什么?任何建議都非常感謝.

Why does it change prefixes and put them everywhere? Using minidom i don't have such problem. Is it configured? Documentation for ElementTree is very poor. The problem is, that i can't find any node after such parsing, for example image - can't find it with or without namespace if i use it like {namespace}image or just image. Why's that? Any suggestions are strongly appreciated.

我已經嘗試過的:

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
for a in root.findall('ns1:image'):
    print a.attrib

這會返回一個錯誤,而另一個則什么也不返回:

This returns an error and the other one returns nothing:

for a in root.findall('{urn:com:xml:data}image'):
    print a.attrib

我也嘗試過制作這樣的命名空間并使用它:

I also tried to make namespace like this and use it:

namespaces = {'ns1': 'urn:com:xml:data'}
for a in root.findall('ns1:image', namespaces):
    print a.attrib

它什么也不返回.我做錯了什么?

It returns nothing. What am i doing wrong?

推薦答案

這個片段來自你的問題,

This snippet from your question,

for a in root.findall('{urn:com:xml:data}image'):
    print a.attrib

不輸出任何內容,因為它只查找樹根的直接 {urn:com:xml:data}image 子級.

does not output anything because it only looks for direct {urn:com:xml:data}image children of the root of the tree.

這個稍加修改的代碼,

for a in root.findall('.//{urn:com:xml:data}image'):
    print a.attrib

將打印 {'imageId': '1'} 因為它使用 .//,它會選擇所有級別的匹配子元素.

will print {'imageId': '1'} because it uses .//, which selects matching subelements on all levels.

參考:https://docs.python.org/2/library/xml.etree.elementtree.html#supported-xpath-syntax.

ElementTree 默認情況下不僅保留原始命名空間前綴有點煩人,但請記住,無論如何,前綴并不重要.register_namespace() 函數可用于在序列化 XML 時設置所需的前綴.該函數對解析或搜索沒有任何影響.

It is a bit annoying that ElementTree does not just retain the original namespace prefixes by default, but keep in mind that it is not the prefixes that matter anyway. The register_namespace() function can be used to set the wanted prefix when serializing the XML. The function does not have any effect on parsing or searching.

這篇關于在 Python 中使用 ElementTree 解析帶有命名空間的 XML的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

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

相關文檔推薦

Troubles while parsing with python very large xml file(使用 python 解析非常大的 xml 文件時出現問題)
Find all nodes by attribute in XML using Python 2(使用 Python 2 在 XML 中按屬性查找所有節點)
Python - How to parse xml response and store a elements value in a variable?(Python - 如何解析 xml 響應并將元素值存儲在變量中?)
How to get XML tag value in Python(如何在 Python 中獲取 XML 標記值)
How to correctly parse utf-8 xml with ElementTree?(如何使用 ElementTree 正確解析 utf-8 xml?)
Parse XML from URL into python object(將 XML 從 URL 解析為 python 對象)
主站蜘蛛池模板: a级片免费在线观看 | 亚洲欧美视频一区 | 欧美超碰在线 | 国产黄色一区二区 | 久久亚洲免费视频 | 久久国产精品视频 | 亚洲免费二区 | 91精品国产综合久久久久久 | 日韩欧美在线一区 | 国产午夜小视频 | 黄色片亚洲 | 欧美视频在线观看一区 | 久久国产欧美 | 久久av红桃一区二区小说 | 水蜜桃一区二区 | 欧美色偷偷 | 六月色婷婷 | 婷婷视频网 | 成人一区二区三区 | 在线a| 日韩黄色网址 | 谁有毛片网站 | 国产精品伦子伦免费视频 | 黄色大片在线免费观看 | 欧美夜夜操 | 三级在线播放 | 国产99页 | 国产一区二区在线播放 | 你懂的在线网站 | 中文字幕免费观看视频 | 久久精品在线视频 | 亚洲va韩国va欧美va精品 | 久久精品视频网 | 免费在线播放av | 精品欧美一区二区三区久久久 | 黄色小视频免费观看 | aaa黄色片 | 日韩精品一区二区三区免费视频 | 国产欧美在线 | 91精品国产综合久久久久久 | 久久精品久久精品 |