2014-09-01 3 views
0

Я хочу заменить все экземпляры точки с запятой «:» в моем узле ниже новым узлом «< colon/>», как показано ниже.Python: Как заменить символ в XML-файле новым узлом?

Я хочу это:

<ShortName> Trigger: Цифровой Край: Источник </ShortName >

стать так:

<ShortName> Trigger < двоеточие/> Digital Edge < двоеточие/> Источник </ShortName >

Я уже пробовал использовать поиск и замену строки, но когда я получаю выход все «<>» изменение & ЛТ и & GT. Может кто-нибудь предложить любые методы для этого. Спасибо

ответ

1

Идея заключается в том, чтобы получить текст узла, разделить его двоеточием и добавить по одному при установке .tail для каждой толстой кишки:

import xml.etree.ElementTree as ET 

data = """<?xml version="1.0" encoding="UTF-8" ?> 
<body> 
    <shortName>Trigger:Digital Edge:Source</shortName> 
</body>""" 

tree = ET.fromstring(data) 
for element in tree.findall('shortName'): 
    items = element.text.split(':') 
    if not items: 
     continue 

    element.text = items[0] 
    for item in items[1:]: 
     colon = ET.Element('colon') 
     colon.tail = item 
     element.append(colon) 

print ET.tostring(tree) 

распечаток:

<body> 
    <shortName>Trigger<colon />Digital Edge<colon />Source</shortName> 
</body> 
+0

Это прекрасно работавшей для меня. Спасибо вам за быстрый ответ. Однако было еще одно. Когда я довольно печатаю XML, появляется в новой строке. Я хочу, чтобы все короткое имя было одной строкой, как показано выше. Есть какой-либо способ сделать это? – Vatsal