我的输入 XML文件是:
<?xml version='1.0' encoding='UTF-8'?>
<try>
something somethingRNA and RNA in RNA.
</try>
我的 Python 代码:
import lxml.etree as ET
import openpyxl
import re
url = 'output_15012015_test.xml'
tree = ET.parse(url)
lncrna = "RNA"
abstract = tree.xpath('//try)
string = abstract[0].text
if(abstract):
anotherString = re.sub(r'\b'+lncrna.lower()+'\\b', '<mark>'+lncrna+'</mark>', string.lower())
abstract[0].text = anotherString
print abstract[0].text
tree.write('FalseRoller.xml', encoding='UTF-8', pretty_print=True)
输出
我获得了以下替换文字而不是 <mark>RNA</mark>
<mark>RNA</mark>
我认为它与tree.write()方法有关。我也是Python和社区的新手。请帮帮我。
答案 0 :(得分:1)
您正在元素.text
中设置XML标记,因此在写入XML时会将其解释为文本,而不是标记,并使用&...;
转义字符。
您想要做的是:
.text
划分为三个部分:在新标记之前,在新标记中,
在新标签参见代码:
tree = ET.parse(url)
lncrna = "RNA"
abstract = tree.xpath('//try')
aList = re.split(r'(\b'+lncrna+r'\b)', abstract[0].text, flags=re.IGNORECASE)
abstract[0].text = aList[0]
for i in range(1,len(aList),2):
anElement = ET.SubElement(abstract[0], 'mark')
anElement.text = aList[i]
anElement.tail = aList[i+1]
abstract[0].insert( (i-1)/2, anElement )
print abstract[0].text
tree.write('FalseRoller.xml', encoding='UTF-8', pretty_print=True)