2015-02-13 2 views
1

Попытайтесь, как я могу, я просто не заставляю это работать. У меня есть файл XML:Python edit xml with minidom

: enter image description here

Мне нужно изменить значение А и добавить имя к имени тегу. Я просто не могу понять, как туда добраться.

мой код:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from xml.dom import minidom 
xmldoc = minidom.parse('example.xml') 


sensorList = xmldoc.getElementsByTagName('sensor') 

for sensor in sensorList: 
    sensor.firstChild.nodeValue = "test" 
    sensor.nextSibling.nodeValue # skip over 
    sensor.nextSibling.nodeValue = "1" 
    sensor.nextSibling.nodeValue = "2" 
    sensor.nextSibling.nodeValue = "3" 
    #print sensor.toxml() 

xml_file_handle = open('example.xml' , 'wb') 
xmldoc.writexml(xml_file_handle) 
xml_file_handle.close() 

Я попробовал несколько вариантов sensor.childNodes [0] .data или значение. Это возвращает ошибку без атрибута. Если я использую print sensor.toxml(), все будет так, как должно быть.

Когда я запускаю этот код, я получаю тест для печати, но он вставлен сразу после тега «датчик», а не тега «имя». Простая проблема синтаксиса, которую я знаю, но я просто не нахожу ее в документах.

Очень благодарен за помощь.

ответ

2

Не удалось найти решение с мини-министром.

Я переключился на ElementTree и смог преодолеть это решение. То, что мне действительно нужно было сделать, было прочитано в CSV-файле и переписало xml со значениями из второго файла, но это оказалось тривиальным по сравнению с тем, чтобы переписать xml.

решение от предыдущего:

#!/usr/bin/python 

import sys 
import xml.etree.ElementTree as ET 
xmlFile = sys.argv[1] 

# Xml parsing. 
tree = ET.parse(xmlFile) 
root = tree.getroot() 

#Access the nodes you want by treating root as an array of arrays 
# roots children = root[x] 
# roots children's children root[x][y]etc 

#The array of sensors 
sensors = root[1] 

for sensor in sensors: 
#Access all of sensors children the same way as root. 
    sensor[0].text = 'test' 
    sensor[3].text = '1' 
    sensor[4].text = '2' 
    sensor[5].text = '3' 

#Open the xmlfile and rewrite it. 
xmlFileHandle = open(xmlFile,'wb') 
xmlFileHandle.write('<?xml version="1.0" encoding="UTF-8"?> \n' + ET.tostring(root)) 
xmlFileHandle.close() 

Обратите внимание на верхней строке XML котла пластины необходимо заменить вручную. Также вам необходимо создать собственный метод для очистки имен имен префикса < ns0: tagname > или удалить схему перед обработкой и заменой, в зависимости от ваших потребностей. некоторым людям нужны префиксы.

Смежные вопросы