xml python

xml.dom 解析XML的API描述


minidom.parse(filename)
加载读取XML文件

doc.documentElement
获取XML文档对象

node.getAttribute(AttributeName)
获取XML节点属性值

node.getElementsByTagName(TagName)
获取XML节点对象集合

node.childNodes #返回子节点列表。

node.childNodes[index].nodeValue
获取XML节点值


node.firstChild
#访问第一个节点。等价于pagexml.childNodes[0]

 

doc = minidom.parse(filename)
doc.toxml('UTF-8')
返回Node节点的xml表示的文本


Node.attributes["id"]
a.name #就是上面的 "id"
a.value #属性的值 

#!/usr/bin/env python
"""
*author:czhipeng
*Date:2013/08/29

"""
from xml.dom import minidom
import fileinput
import time

class parseXMLV(object):
    def __init__(self,ip,javaEnv):
        self.ip=ip
        self.javaEnv=javaEnv


    def generate_coreXml(self):
        impl=minidom.getDOMImplementation()
        dom=impl.createDocument(None,'configuration',None)
        root=dom.documentElement
        property=dom.createElement('property')
        root.appendChild(property)

        nameE=dom.createElement('name')
        nameT=dom.createTextNode('hadoop.tmp.dir')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('/hadoop/tmp')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('fs.default.name')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('hdfs://'+self.ip+':9000')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('hadoop.proxyuser.root.hosts')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip)
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('hadoop.proxyuser.root.groups')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('*')
        nameE.appendChild(nameT)
        property.appendChild(nameE)
       
        f=open('core-siteTmp.xml','a+')
        dom.writexml(f,addindent=' ',newl='\n')
        f.close()
        
        dst=file('core-site.xml','wa+')
        inlines=fileinput.input(files=('core-siteTmp.xml'))
        for inline in inlines:
           if fileinput.lineno()!=3:
               dst.write(inline)
        dst.close()
        f.close()

    def generate_hdfsXml(self):
        impl=minidom.getDOMImplementation()
        dom=impl.createDocument(None,'configuration',None)
        root=dom.documentElement
        property=dom.createElement('property')
        root.appendChild(property)

        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.replication')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('3')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.name.dir')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('file:/hadoop/hdfs/name')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('final')
        nameT=dom.createTextNode('true')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.federation.nameservice.id')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('ns1')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.backup.address.ns1')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':50100')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.backup.http-address.ns1')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':50105')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.federation.nameservices')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('ns1')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.rpc-address.ns1')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':9000')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.rpc-address.ns2')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':9000')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.http-address.ns1')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':23001')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.http-address.ns2')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':13001')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.dataname.data.dir')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('file:/hadoop/hdfs/data')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('final')
        nameT=dom.createTextNode('true')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.secondary.http-address.ns1')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':23002')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.secondary.http-address.ns2')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':23002')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.secondary.http-address.ns1')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':23003')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('dfs.namenode.secondary.http-address.ns2')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':23003')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        f=open('tmphdfssite.xml','a+')
        dom.writexml(f,addindent=' ',newl='\n')
        f.close()
        dst=file('hdfs-site.xml','wa+')
        inlines=fileinput.input(files=('tmphdfssite.xml'))
        for inline in inlines:
           if fileinput.lineno()!=3:
               dst.write(inline)
        dst.close()
        f.close()

    def addJava(self):
        f=open("hadoop-env.sh",'a+')
        f.write(self.javaEnv)
        f.close()      
    def generate_mapredXml(self):
        impl=minidom.getDOMImplementation()
        dom=impl.createDocument(None,'configuration',None)
        root=dom.documentElement
        property=dom.createElement('property')
        root.appendChild(property)

        nameE=dom.createElement('name')
        nameT=dom.createTextNode('mapreduce.framework.name')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('yarn')
        nameE.appendChild(nameT)
        property.appendChild(nameE)
        f=open('tmpmapredsite.xml','a+')
        dom.writexml(f,addindent=' ',newl='\n')
        f.close()
        
        dst=file('mapred-site.xml','wa+')
        inlines=fileinput.input(files=('tmpmapredsite.xml'))
        for inline in inlines:
           if fileinput.lineno()!=3:
               dst.write(inline)
        dst.close()
        f.close()


    def generate_yarnXml(self):
        impl=minidom.getDOMImplementation()
        dom=impl.createDocument(None,'configuration',None)
        root=dom.documentElement
        property=dom.createElement('property')
        root.appendChild(property)

        nameE=dom.createElement('name')
        nameT=dom.createTextNode('yarn.resourcemanager.address')
        nameE.appendChild(nameT)
        property.appendChild(nameE)
       
        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':18040')
        nameE.appendChild(nameT)
        property.appendChild(nameE)
       '''
        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('yarn.resourcemanager.nodes.exclude-path')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('/home/hadoop/hadoop/etc/hadoop/node-exclude.list')
        nameE.appendChild(nameT)
        property.appendChild(nameE)
'''
        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('yarn.resourcemanager.scheduler.address')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':18030')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('yarn.resourcemanager.webapp.address')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':18088')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('yarn.resourcemanager.resource-tracker.address')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':18025')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('yarn.resourcemanager.admin.address')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode(self.ip+':18141')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('yarn.nodemanager.aux-services')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('mapreduce.shuffle')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        property=dom.createElement('property')
        root.appendChild(property)
        nameE=dom.createElement('name')
        nameT=dom.createTextNode('yarn.nodemanager.aux-services.mapreduce.shuffle.class')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        nameE=dom.createElement('value')
        nameT=dom.createTextNode('org.apache.hadoop.mapred.ShuffleHandler')
        nameE.appendChild(nameT)
        property.appendChild(nameE)

        f=open('yarn-site.xml','w+')
        dom.writexml(f,addindent=' ',newl='\n',encoding='utf-8')
        f.close()
        
        

if __name__=="__main__":
    t=parseXMLV("10.108.39.104","export JAVA_HOME=/usr/java/jdk1.7.0_25")
    start=time.time()
    t.generate_yarnXml()
    t.generate_coreXml()
    t.addJava() 
    t.generate_mapredXml() 
    t.generate_hdfsXml()
    stop=time.time()
    print stop-start #3.376ms


不生成 只替换:

#!/usr/bin/env python
'''
name:chenzhipeng
date:2013-0904
'''
import os
import re
import time
class fileConfig(object):
    def __init__(self,ip,javaEnv):
        self.ip=ip
        self.javaEnv=javaEnv

    def configYarnSite(self):
        f=open("tmpYarnSite.xml","r+")
        open("yarn-site.xml",'w').write(re.sub(r'&ip&',self.ip,f.read()))    
        f.close()

    def configHdfsSite(self):
        f=open("tmpHdfsSite.xml","r+")
        open("hdfs-site.xml",'w').write(re.sub(r'&ip&',self.ip,f.read()))
        f.close()

    def addJava(self):
        f=open("hadoop-env.sh",'a+')
        f.write(self.javaEnv)
        f.close()

    #map-site.xml no alter
    
    def configCoreSite(self):
        f=open("tmpCoreSite.xml","r+")
        open("core-site.xml",'w').write(re.sub(r'&ip&',self.ip,f.read()))
        f.close()
    
if __name__=="__main__":
    t=fileConfig("10.108.39.104","export JavaHome=")
    start=time.time()
    #t.configYarnSite()
    #t.configHdfsSite()
    #t.addJava()
    t.configCoreSite()
    stop=time.time()
    print stop-start


你可能感兴趣的:(xml python)