[英]How to fetch particular info from XML (Python)
我需要從此XML腳本中獲取用戶名。 我閱讀了Python中的元素樹庫,並嘗試了他們對XML文件所做的工作,但沒有成功。 我所需要的只是一個獲取用戶名的示例,這將非常有幫助並幫助我理解其余內容。 首先是XML文件,然后是代碼。
<?xml version="1.0" encoding="UTF-8" ?>
- <definitions name="GetEmailCert" targetNamespace="urn:GetEmailCert"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="urn:GetEmailCert" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <message name="GetEmailCertRequest">
<part name="username" type="xsd:string" />
</message>
- <message name="GetEmailCertResponse">
<part name="fullname" type="xsd:string" />
<part name="email" type="xsd:string" />
<part name="certificate" type="xsd:string" />
</message>
from xml.etree.ElementTree import ElementTree
tree = ElementTree()
tree.parse("test.xml")
root = tree.getroot()
root.tag
root.attrib
for child in root:
print child.tag, child.attrib
#This one works
for username in root.iter('username'):
print username
#This one I do not know how to correctly implement
除了@Robᵩ發現的-
( 連字符 )字符(這使我相信您從用戶友好的顯示工具復制/粘貼了XML Blob)之外,我還發現了2個附加字符 :
definitions
節點未正確關閉 定義:僅存在一個元素,稱為根元素或文檔元素...
由於這些錯誤, XML仍然無效:
xml.etree.ElementTree
無法解析 修復所有錯誤后,XML看起來像這樣(請注意,我包裹一切都在根節點 (即我叫root
)):
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<definitions name="GetEmailCert" targetNamespace="urn:GetEmailCert"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="urn:GetEmailCert" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
<message name="GetEmailCertRequest">
<part name="username" type="xsd:string"/>
</message>
<message name="GetEmailCertResponse">
<part name="fullname" type="xsd:string"/>
<part name="email" type="xsd:string"/>
<part name="certificate" type="xsd:string"/>
</message>
</root>
代碼方面:有更多方式(包括XML庫)可以實現您的目標; 我選擇了一個使用[Python]的工具:xml.etree.ElementTree — ElementTree XML API (開始實施時)。
現在,我不太了解“ 獲取用戶名 ”是什么意思,但是我認為它是<part name="username" type="xsd:string"/>
節點。 考慮到我的假設是正確的,這是類似於樹的方法(應該是通用的):
root
) message
) part
) username
的name屬性; 如果有,那就是我們想要的節點 (打印出來) 和代碼:
import xml.etree.ElementTree as ET
def main():
tree = ET.parse("test.xml")
root_node = tree.getroot()
message_nodes = root_node.iter("message")
for message_node in message_nodes:
part_nodes = message_node.iter("part")
for part_node in part_nodes:
if part_node.attrib.get("name", "") == "username":
print(ET.tostring(part_node))
if __name__ == "__main__":
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.