首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中使用lxml,我需要在输入xml文件中将"RNA“替换为<mark>RNA</mark>。代码如下

在Python中使用lxml,我需要在输入xml文件中将"RNA“替换为<mark>RNA</mark>。代码如下
EN

Stack Overflow用户
提问于 2015-01-20 06:40:38
回答 1查看 67关注 0票数 1

我的输入文件是:

代码语言:javascript
复制
<?xml version='1.0' encoding='UTF-8'?>
<try>
something somethingRNA and RNA in RNA.
</try> 

我的Python代码:

代码语言:javascript
复制
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>

代码语言:javascript
复制
 &lt;mark&gt;RNA&lt;/mark&gt;

我认为这与tree.write()方法有关。我也是Python和社区的新手。请帮我处理这个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-20 06:50:01

您是在元素.text中设置XML标记,因此当写入XML时,它被解释为文本,而不是标记,字符用&...;转义。

你想做的是:

  • .text分为三个部分:新标签之前、新标签中、新标签之后
  • 添加新标签并设置文本和尾

见代码:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28039181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档