2017-08-21 215 views
0

以下是原始的xml文件。使用python修改XML文件(klish types.xml)

<?xml version="1.0" encoding="UTF-8"?> 
<CLISH_MODULE xmlns="http://clish.sourceforge.net/XMLSchema" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://clish.sourceforge.net/XMLSchema 
        http://clish.sourceforge.net/XMLSchema/clish.xsd"> 
    <!--=======================================================--> 
    <PTYPE name="VLAN_ID" 
     pattern="(409[0-5]|40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[1-9])" 
     help="Number in the range 1-4095"/> 
    <!--=======================================================--> 
    <PTYPE name="MYFIELD" 
     pattern="0..99" 
     help="Entry number"/> 
    <!--=======================================================--> 
</CLISH_MODULE> 

這裏是Python代碼來修改xml文件

import xml.etree.ElementTree as ET 

tree = ET.parse('testxml.xml') 
ET.register_namespace('', "http://clish.sourceforge.net/XMLSchema") 
root = tree.getroot() 

for child in root: 
    for key, value in child.items(): 
     if value == "MYFIELD": 
      print value 
      child.attrib['pattern'] = '1..55' 

tree.write('testxml.xml', encoding="UTF-8") 

這裏是導致XML文件。

<?xml version='1.0' encoding='UTF-8'?> 
<CLISH_MODULE xmlns="http://clish.sourceforge.net/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://clish.sourceforge.net/XMLSchema      http://clish.sourceforge.net/XMLSchema/clish.xsd"> 

     <PTYPE help="Number in the range 1-4095" name="VLAN_ID" pattern="(409[0-5]|40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[1-9])" /> 

     <PTYPE help="Entry number" name="MYFIELD" pattern="1..55" /> 



</CLISH_MODULE> 

我可以修改內容,但在保存格式時存在問題。您可以請分享有關如何解決此問題的知識。

回答

1

嘗試很多事情後,通過解析輸入文件,並進行更改試過這種方式在屬性和它的值相匹配

if value == "MYFIELD":   
       fin = open("testxml.xml") 
       fout = open("testx.xml", "wt") 
       for line in fin: 
        xm= 'pattern="'+child.attrib['pattern']+'"' 
        fout.write(line.replace(xm, 'pattern="1..55"')) 

輸出

<?xml version="1.0" encoding="UTF-8"?> 
<CLISH_MODULE xmlns="http://clish.sourceforge.net/XMLSchema" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://clish.sourceforge.net/XMLSchema 
        http://clish.sourceforge.net/XMLSchema/clish.xsd"> 
    <!--=======================================================--> 
    <PTYPE name="VLAN_ID" 
     pattern="(409[0-5]|40[0-8][0-9]|[1-3][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[1-9])" 
     help="Number in the range 1-4095"/> 
    <!--=======================================================--> 
    <PTYPE name="MYFIELD" 
     pattern="1..55" 
     help="Entry number"/> 
    <!--=======================================================--> 
</CLISH_MODULE> 

不是一個最佳的解決方案,但按預期給出結果

+0

太棒了!謝謝您的幫助。 – Jeyaram

+1

:)我從中學到了一些東西,謝謝 –