#! /usr/bin/env python3

# -*- coding:utf-8 -*-

import xml.dom.minidom  #该模块被用来处理xml文件

#打开xml文档

dom=xml.dom.minidom.parse('e:/pcf10.xml')

#xml.dom.minidom模块被用来处理xml文件,并将这个文件对象赋值给dom变量。

#documentElement用于得到dom对象的文档元素,并把获得的对象给root

#得到文档元素对象

root=dom.documentElement

print (root.nodeName)

print (root.nodeValue)

print (root.nodeType)

print (root.ELEMENT_NODE)

'''

mapper

None

1

1

'''

#每个结点都有它的nodeName,nodeValue,nodeType属性。

#nodeName为结点名字。

#nodeValue是结点的值,只对文本结点有效。

#nodeType是结点的类型。catalog是ELEMENT_NODE类型

#现有以下几种:

'''

ATTRIBUTE_NODE

CDATA_SECTION_NODE

COMMENT_NODE

DOCUMENT_FRAGMENT_NODE

DOCUMENT_NODE

DOCUMENT_TYPE_NODE

ELEMENT_NODE

ENTITY_NODE

ENTITY_REFERENCE_NODE

NOTATION_NODE

PROCESSING_INSTRUCTION_NODE

TEXT_NODE

'''

#不同的节点类型有不同的值,例CDATA_SECTION_NODE=4,元素节点ELEMENT_NODE=1,属性节点ATTRIBUTE_NODE=2,文本节点TXT_NODE=3,注释节点COMMENT_NODE=8

#获得子标签

#对于知道标签名字的子元素,可以使用getElementsByTagName方法获取:

bb=root.getElementsByTagName('select')

#bb 就是root的指定标签select的子节点列表 ,node为结点的意思,bb[0]表示一组标签中的第一个节点;bb[2]表示这一组标签中的第三个节点

b=bb[0]

b1=bb[1]

b2=bb[2]

print(b.nodeName)

print (b.nodeValue)

print (b1.nodeName)

print (b2.nodeName)

'''

select

None

select

select

'''

#root.getElementsByTagName('select')获得的是标签为select的节点集合

itemlist=root.getElementsByTagName('select')

item=itemlist[0] #item 为文件中第一个select结点

un=item.getAttribute("id") #获得节点属性值

print (un)

print('firstChild\'s nodeType is : ',root.firstChild.nodeType)  #用node.nodeType可返回节点类型。

print(root.firstChild.nodeName)

print('item\'s second node\'s type is : ', item.childNodes[1].nodeType)

'''

pstk0001

firstChild's nodeType is :   3

item's second node's type is :  4

'''

#getAttribute方法可以获得元素的属性所对应的值。

import re

modl=re.compile('(pgenius.)([a-z_A-Z]{2,50})') #()在返回结果分组显示

tableset=set()  #set为集合类数据,不含重复值,可进行交、并、差等集合运算。

f=open('e:/work/w.txt','w')  #有则打开,无则创建w.txt.

for i in itemlist:

tableset1=set()

tableset2=set()

content=[n.data.strip() for n in i.childNodes if n.nodeType==4][0]

#childNodes 返回的是节点的子节点集合,包含元素节点、文本节点、属性节点、注释节点等,事实上,文档里几乎每一样东西都是一个节点,连空格、换行符都

#会被解释成节点。而且都包含在childNodes属性所返回的数组中。

tabless=modl.findall(content)  #返回文件中符合匹配模式的结果集

for n,m in tabless:

tableset1.add(n)

tableset2.add(m)

tableset.add(m)

tableset1=list(tableset1)

tableset2=list(tableset2)

if len(tableset1):

print(i.getAttribute("id"))

f.write(i.getAttribute("id"))

f.write('\n')

print(tableset1)

f.write('\n')

print(tableset2)

for j in tableset2:

f.write(j)

f.write('\n')

print(tableset)

f.close()

#print([n.data.strip() for n in  itemlist[1].childNodes if n.nodeType==4]) #.strip去掉的是开头和结尾的空格

#获得标签对之间的数据,如 <caption>测试</caption>    中的“测试”。

print(item.firstChild.data)

#返回值为空

#firstChild属性返回被选结点的第一个子结点,.data表示获取该节点的的数据

#firstChild返回节点类型为元素节点nodeType=1.

xml文档的读取的更多相关文章

  1. 从多个XML文档中读取数据用于显示webapi帮助文档

    前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDo ...

  2. net9:图片变成二进制流存入XML文档,从XML文档中读出图片以及从XML文档中读取并创建图片文件

    原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] fileToXml类: using System;using System.Data;using System.C ...

  3. 【JAVA与DOM4J实现对XML文档的CRUD操作】

    一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...

  4. java解析xml文档(dom)

    DOM解析XML文档 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件 ...

  5. 使用Dom4j创建xml文档

    我们学习dom4j为的就是使用它来创建XML文档.读取文档等更为方便,下面通过一个实例来展示如何通过dom4j去创建XML文档.展示怎样通过两种方式去创建元素,可以直接通过addElement方法返回 ...

  6. XmlReader和XElement组合之读取大型xml文档

    简介 在.NET framework 中存在大量操作xml数据的类库和api,但在.NET framework 3.5后我们的首选一般就是linq to xml. linq to xml操作xml数据 ...

  7. Java获取XML节点总结之读取XML文档节点

    dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...

  8. 详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案

    主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxe ...

  9. 读取XML文档结构并写入内容

    1.在项目中新建XML文档结构.xsd文件,在其中添加相应的节点. 2.读取文档结构并写入内容 string initFileName = @"D:\Config.xml"; Da ...

随机推荐

  1. Netty实现简易http_server

    Netty可以通过一些handler实现简单的http服务器.具体有三个类,分别是HttpServer.java.ServerHandlerInit.java.BusiHandler.java. 具体 ...

  2. python中的面向对象学习以及类的多态

    接下来类的第三个重要的特性:多态(一种接口,多种实现) 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特 ...

  3. boke例子: freermarker:在使用ajax传递json数据的时候多出冒号

    boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...

  4. 雷林鹏分享:C# 环境

    C# 环境 在这一章中,我们将讨论创建 C# 编程所需的工具.我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序.因此,在讨论运行 C# 程序的可用工具之前,让我们先了解一 ...

  5. C#如何实现类似QQ那样靠边隐藏的功能

    http://www.cnblogs.com/yechensi/archive/2009/08/02/1537145.html C#如何实现类似QQ那样靠边隐藏的功能 你想过为自己的程序添加靠边隐藏的 ...

  6. CSS之透视perspective属性

    透视原理: 近大远小 . 浏览器透视:把近大远小的所有图像,透视在屏幕上. 书写方式不同的定义 perspective有两种定义方式,如下 .class{ perspective: 800px; } ...

  7. SWUST OJ(955)

    单链表上查找算法的实现 #include <stdio.h> #include <stdlib.h> typedef struct LinkNode //单链表节点结构的定义 ...

  8. 【Java】【8】StringUtils中isNotEmpty和isNotBlank的区别

    前言: 1,StringUtils.isNotEmpty(str)和StringUtils.isNotBlank(str)都是用来做非空判断的 2,通常用isNotBlank 3,import org ...

  9. csu oj 1341 string and arrays

    Description 有一个N*N的字符矩阵,从上到下依次记为第1行,第2行,……,第N行,从左至右依次记为第1列,第2列,……,第N列. 对于这个矩阵会进行一系列操作,但这些操作只有两类: (1) ...

  10. IDEA 错误:找不到或无法加载主类

    下的java核心编程的源码,只有java文件,没有idea或者eclipse的项目结构信息. 分别用eclipse和idea打开了一遍,方便学习调试. 项目文件夹:E:\学习资料\Java\语法\ja ...