python中的Paser XML

时间:2018-09-06 07:39:16

标签: python xml

我收到此xml响应,有人可以帮助我从xml标签获取令牌吗?

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><LoginResponse xmlns="http://videoos.net/2/XProtectCSServerCommand"><LoginResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><RegistrationTime>2018-09-06T07:30:38.4571763Z</RegistrationTime><TimeToLive><MicroSeconds>3600000000</MicroSeconds></TimeToLive><TimeToLiveLimited>false</TimeToLiveLimited><Token>TOKEN#xxxxx#</Token></LoginResult></LoginResponse></s:Body></s:Envelope> 

我将其作为字符串

也尝试使用lxml和其他类似ET的库,但无法提取令牌字段。 HELPPP

使用xml格式更新,以方便阅读,仅供参考。

<?xml version="1.0" encoding="utf-8"?>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <LoginResponse xmlns="http://videoos.net/2/XProtectCSServerCommand">
      <LoginResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <RegistrationTime>2018-09-06T07:30:38.4571763Z</RegistrationTime>
        <TimeToLive>
          <MicroSeconds>3600000000</MicroSeconds>
        </TimeToLive>
        <TimeToLiveLimited>false</TimeToLiveLimited>
        <Token>TOKEN#xxxxx#</Token>
      </LoginResult>
    </LoginResponse>
  </s:Body>
</s:Envelope>

2 个答案:

答案 0 :(得分:1)

使用lxml

演示:

x = '''<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <LoginResponse xmlns="http://videoos.net/2/XProtectCSServerCommand">
      <LoginResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <RegistrationTime>2018-09-06T07:30:38.4571763Z</RegistrationTime>
        <TimeToLive>
          <MicroSeconds>3600000000</MicroSeconds>
        </TimeToLive>
        <TimeToLiveLimited>false</TimeToLiveLimited>
        <Token>TOKEN#xxxxx#</Token>
      </LoginResult>
    </LoginResponse>
  </s:Body>
</s:Envelope>'''

from lxml import etree
xmltree = etree.fromstring(x)
namespaces = {'content': "http://videoos.net/2/XProtectCSServerCommand"}
items = xmltree.xpath('//content:Token/text()', namespaces=namespaces)
print(items)

输出:

['TOKEN#xxxxx#']

答案 1 :(得分:1)

text  = """
<?xml version="1.0" encoding="utf-8"?>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <LoginResponse xmlns="http://videoos.net/2/XProtectCSServerCommand">
      <LoginResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <RegistrationTime>2018-09-06T07:30:38.4571763Z</RegistrationTime>
        <TimeToLive>
          <MicroSeconds>3600000000</MicroSeconds>
        </TimeToLive>
        <TimeToLiveLimited>false</TimeToLiveLimited>
        <Token>TOKEN#xxxxx#</Token>
      </LoginResult>
    </LoginResponse>
  </s:Body>
</s:Envelope>
"""
from bs4 import BeautifulSoup

parser = BeautifulSoup(text,'xml')
for item in parser.find_all('Token'):
    print(item.text)