python 高级码农成才之路

爬虫项目之xml解析

2021-03-29  本文已影响0人  幼姿沫

1.xml是获取xml报文并且如何分析数据

xml文件如下*

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

<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">

  <RegistrationInfo>

    <Date>2018-03-19T03:57:44.2908045</Date>

    <Author>FANBINGLIN\Administrator</Author>

    <Description>开机提醒事件</Description>

  </RegistrationInfo>

  <Triggers>

    <LogonTrigger>

      <Enabled>true</Enabled>

    </LogonTrigger>

  </Triggers>

  <Principals>

    <Principal id="Author">

      <UserId>FANBINGLIN\Administrator</UserId>

      <LogonType>InteractiveToken</LogonType>

      <RunLevel>LeastPrivilege</RunLevel>

    </Principal>

  </Principals>

  <Settings>

    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>

    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>

    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>

    <AllowHardTerminate>true</AllowHardTerminate>

    <StartWhenAvailable>false</StartWhenAvailable>

    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>

    <IdleSettings>

      <StopOnIdleEnd>true</StopOnIdleEnd>

      <RestartOnIdle>false</RestartOnIdle>

    </IdleSettings>

    <AllowStartOnDemand>true</AllowStartOnDemand>

    <Enabled>true</Enabled>

    <Hidden>false</Hidden>

    <RunOnlyIfIdle>false</RunOnlyIfIdle>

    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>

    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>

    <WakeToRun>false</WakeToRun>

    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>

    <Priority>7</Priority>

  </Settings>

  <Actions Context="Author">

    <ShowMessage>

      <Title>每日提醒</Title>

      <Body>

1、掌握python基本语法,3.19-3.24

2、VBA程序研究

3、工作任务总结</Body>

    </ShowMessage>

  </Actions>

</Task>

解析文件如下*

#!/usr/bin/python3

#coding:utf-8

from xml.dom.minidom import parse

import xml.dom.minidom

Root = xml.dom.minidom.parse('开机提醒.xml')

# print(dir(DOMTree))

task = Root.documentElement

# print(dir())

for line in task.childNodes:

    # print('line.nodeName:',line.nodeName,'line.nodeType:',line.nodeType,'line.nodeValue:',line.nodeValue,'line.normalize:',line.normalize)

    # print(len(line))

    # print(line)

    if 3 == line.nodeType:

        continue

    if 'Actions' == line.nodeName:

        for tmp in line.childNodes:

            # print(tmp)

            if 3 == tmp.nodeType:

                continue

            # print(tmp)

            for tmp1 in tmp.childNodes:

                if 3 == tmp1.nodeType:

                    continue   

                for tmp2 in tmp1.childNodes:

                    # print(tmp2)

                    # if 3 == tmp2.nodeType:

                    #  continue

                    print(tmp2.nodeValue)

    # for line1 in line.childNodes:

    #  if 3 == line1.nodeType:

    #      continue

    #  # print(line1.nodeName)

    #  # print(dir(line1))

    #  for line2 in line1.childNodes:

    #      if 3 == line2.nodeType:

    #          continue

            # print(line2.nodeValue)

            # print(line2.data)

效果图展示*

2.xml的解析

XML 指可扩展标记语言(eXtensibleMarkupLanguage)

XML 被设计用来传输和存储数据。

XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。

它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言


Python 对 XML 的解析

常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。

Python 有三种方法解析 XML,SAX,DOM,以及 ElementTree:

1.SAX (simple API for XML )

Python 标准库包含 SAX 解析器,SAX 用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

2.DOM(Document Object Model)

将 XML 数据在内存中解析成一个树,通过对树的操作来操作XML。

3.ElementTree(元素树)

ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。

上一篇 下一篇

猜你喜欢

热点阅读