Python的XML节点替换或字符串替换问题

有一个xml文件:<root>text<a/><a/>...这里省略n个<a/><root>想替换成下面的形式:<root>text<a1>a1fora</a1><a2>... 有一个xml文件:
<root>text
<a/>
<a/>
...这里省略n个<a/>

<root>
想替换成下面的形式:
<root>text
<a1>a1 for a</a1>
<a2>a2 for a</a2>
...n个<an>...</an>

<root>
请问,应该怎么替换呢?用字符串替换或lxml包的方法都可以。谢谢!
原xml是没有换行的:<root>text<a/><a/><a/>...<root>
要生成的xml也不需要换行:
<root>text<a1>a1for a</a1><a2>a2for a</a2><a3>a3for a</a3>...<root>
展开
 我来答
s15885823584
推荐于2016-09-30 · TA获得超过411个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:211万
展开全部
fpr=open("text.txt")
data=fpr.read()
n=0
for i in range(len(data)):
if data[i]=='/' and data[i+1]=='>':
n+=1
newdata=data[0:i]+str(n)+'>a'+str(n)+'fora</a'+str(n)+'>'
k=i
break
for i in range(k+1,len(data)):
if data[i]=='/' and data[i+1]=='>':
n+=1
newdata=newdata+data[i-2:i]+str(n)+'>a'+str(n)+'fora</a'+str(n)+'>'
newdata+='<root>'
fpr.close()
fpw=open("newtext.txt","w+")
fpw.write(newdata)
fpw.close()

测试数据:<root>text<a/><a/><a/><root>
输出结果:<root>text<a1>a1fora</a1><a2>a2fora</a2><a3>a3fora</a3><root>
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友87b2a52
2013-06-17 · 知道合伙人软件行家
百度网友87b2a52
知道合伙人软件行家
采纳数:523 获赞数:3490
毕业于南京大学,硕士学位。10年软件研发经验。现任信息系统架构师。

向TA提问 私信TA
展开全部

测试文件

<root>text

    <a/>

    <a/>

    <a/>

<root>

程序:

old=open("test.xml")
lines=old.readlines()
a="<a/>"
i=1
newlines=[]
for line in lines:
    if a in line:
        line=line.replace(a,"<a"+str(i)+">a"+str(i)+"for a</a"+str(i)+">")
        i=i+1
    newlines.append(line)

for line in newlines:
    print line

new=open("newtest.xml","w")
new.writelines(newlines)
new.close()
old.close()

结果:

<root>text

    <a1>a1for a</a1>

    <a2>a2for a</a2>

    <a3>a3for a</a3>

<root>

给分吧,哈哈。

追问
哦,您这个是假设这个xml文件是well formed,实际上不是的。我这样写是为了清楚,其实这个xml文件是下面这样的,没有换行:
text
要生成的xml也不需要换行:
texta1for aa2for aa3for a
您有办法替换吗?
追答
import xml.dom.minidom
oldxmlfile=open("test.xml")
oldxml=oldxmlfile.read()
oldxmlfile.close()
doc = xml.dom.minidom.parseString(oldxml)
index=1
for node in doc.getElementsByTagName("a"):
    node.tagName="a"+str(index)
    index=index+1
newxml=doc.toprettyxml()
xmlfile=open("newxml2.xml","w")
xmlfile.write(newxml);
xmlfile.close()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式