如何从XML(Python)中获取特定信息

时间:2017-06-06 16:52:25

标签: python xml

我需要从此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 

1 个答案:

答案 0 :(得分:0)

除了@Robᵩ发现的-连字符)字符之外(这让我相信您从用户复制/粘贴 XML blob-友好的显示工具),我又发现了2个:

  • definitions节点未正确关闭
  • XML 有多个根节点(在我们的例子中为3)。根据{{​​3}}:
      

    定义:只有一个元素,称为根或文档元素......

由于这些错误, XML 仍然无效:

  • Python xml.etree.ElementTree无法解析它
  • 2个网页浏览器( Chrome IE )无法呈现

修复所有错误后, XML 看起来像这样(请注意我已将所有内容封装在 root 节点中(我称之为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 库)来实现您的目标;我选择了使用[W3]: Extensible Markup Language (XML) 1.0 (Fifth Edition)的那个(当你开始实施时)。

现在,我不太明白“获取用户名”是什么意思,但我认为它是<part name="username" type="xsd:string"/>节点。考虑到我的假设是正确的,这里是式方法(它应该是通用的):

  • test.xml 中的 XML 文档有一个 root 节点(标记为root
  • root 节点 0或更多(我们的 XML 2个)消息节点(标记为{{ 1}})
  • 每个消息节点都有 0或更多 部分节点(标记为message
  • 每个部分节点可能<或> 具有名称属性,其值为part;如果是的话,那就是我们想要的节点(打印它)

代码:

username