#! /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.

 

      

 posted on 2018-08-28 14:54  庭明  阅读(124)  评论(0编辑  收藏  举报