python按照模板解析xml文件_python-正则表达式以XML格式解析模板标签

我需要解析一些XML,以提取嵌入式模板标签以进行进一步的解析.不过,我似乎无法弯曲Python的正则表达式来执行我想要的操作.

用英语:当行中的任何位置包含模板标记时,请删除该特定行的所有XML,仅将模板标记保留在其位置.

我整理了一个测试用例进行演示.这是原始的XML:

Header 1

Header 2

Header 3

{% for i in items %}

{{ i.field1 }}

{{ i.field2 }}

{{ i.field3 }}

{% endfor %}

这是期望的结果:

Header 1

Header 2

Header 3

{% for i in items %}

{{ i.field1 }}

{{ i.field2 }}

{{ i.field3 }}

{% endfor %}

这是一些我正在测试的python代码:

#!/usr/bin/env python

import re

f = open( 'regex_trial.xml', 'r' )

orig_xml = f.read()

f.close()

p = re.compile( '

{%.*?%}).*?', re.DOTALL )

new_xml = p.sub( '\g', orig_xml, 0 )

print new_xml

此正则表达式的实际结果是:

{% for i in items %}

{% endfor %}

任何帮助是极大的赞赏!如果能够弄清楚这一点,我们将能够从Django支持的站点动态地动态生成MS Word docx文件.谢谢!!

更新:这是我使用的最终代码

from xml.etree import ElementTree

import cStringIO as StringIO

TEMPLATE_TAG = 'template_text'

tree = ElementTree.parse( 'regex_trial.xml' )

rows = tree.getiterator('tr')

for row in rows:

for cell in row.getiterator('t'):

if cell.text and cell.text.find( '{%' ) >= 0:

template_tag = cell.text

row.clear()

row.tag = TEMPLATE_TAG

row.text = template_tag

break

output = StringIO.StringIO()

tree.write( output )

xml = output.getvalue()

xml = xml.replace('' % TEMPLATE_TAG, '')

xml = xml.replace('%s>' % TEMPLATE_TAG, '')

print xml

感谢您的所有帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值