【发布时间】:2016-08-31 00:00:14
【问题描述】:
我正在使用 lxml 和 python 2.7 来解析 xml 文件。我需要在某些时候使用 remove 方法来删除一个元素,但很奇怪的是它也会删除它之后的一些文本。
输入的xml是:
<ce:para view="all">Web and grid services <ce:cross-refs refid="BIB10 BIB11">[10,11]</ce:cross-refs>, where they can provide rich service descriptions that can help in locating suitable services.</ce:para>
然后我需要将cross-refs 元素扩展为多个cross-ref,并分隔refid。所以输出应该是这样的:
<ce:para view="all">Web and grid services <ce:cross-ref refid="BIB10">[10]</ce:cross-ref><ce:cross-ref refid="BIB11">[11]</ce:cross-ref>, where they can provide rich service descriptions that can help in locating suitable services.</ce:para>
这是带有一些缩写的python代码:
xpath = "//ce:cross-refs"
cross_refs = tree.xpath(xpath, namespaces={'ce': 'http://www.elsevier.com/xml/common/dtd'})
for c in cross_refs:
c_parent = c.getparent()
c_values = c.text.strip("[]")
...
ref_ids = c.attrib['refid'].strip().split()
i = 0
for r in ref_ids:
...
tag = et.QName(CE, 'cross-ref')
exploded_cross_refs = et.Element(tag, refid=r, nsmap=NS_MAP)
exploded_cross_refs.text = "[" + c_values[i] + "]"
c.addprevious(exploded_cross_refs)
i += 1
c_parent.remove(c)
获取cross-refs 元素,展开refid 值和元素文本值,然后创建新的cross-ref 元素并将它们添加到原始cross-refs 之前,最后我想删除旧的cross-refs 元素和我的问题就在这里:当我删除这个元素时,结束标记和下一个元素之间的文本也会被删除,所以最终结果是这样的:
<ce:para view="all">Web and grid services <ce:cross-ref refid="BIB10">[10]</ce:cross-ref><ce:cross-ref refid="BIB11">[11]</ce:cross-ref></ce:para>
请注意,最后一个 cross-ref 和 para 元素之间的文本已被删除!我该如何解决这个问题?
【问题讨论】:
标签: python xml python-2.7 lxml