簡體   English   中英

如何從XML(Python)獲取特定信息

[英]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個附加字符

由於這些錯誤, XML仍然無效:

  • Pythonxml.etree.ElementTree無法解析
  • 2個Web瀏覽器( ChromeIE )無法呈現它

修復所有錯誤后,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"/>節點。 考慮到我的假設是正確的,這是類似於的方法(應該是通用的):

  • 的test.xml XML文檔具有一個根節點 (標記的root
  • 根節點具有0個或多個 (2個用於我們的XML) 消息的節點(標記的message
  • 每個消息節點具有0個或更多的 part節點(標記的part
  • 每個部分節點可以具有或不具有其名字usernamename屬性; 如果有,那就是我們想要的節點 (打印出來)

和代碼:

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.

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