有一个像这样的xml文件:
<body>
<part>verb</part>
love
<meaning>
<num>1.</num>
</meaning>
like
</body>
我喜欢在第一个孩子及其身体节点的尾部之后用<text>...</text>
包裹内容。也就是说,
<body>
<part>verb</part>
love
<text>
<meaning>
<num>1.</num>
</meaning>
like
</text>
</body>
我试过这个,但接下来我不知道。
import lxml.etree as ET
xml = '''\ <body>
<part>verb</part>
love
<meaning>
<num>1.</num>
</meaning>
like
</body>'''
body = ET.fromstring(xml)
body.insert(2, text)
答案 0 :(得分:0)
让我们从你得到的地方开始:
body = ET.fromstring(xml)
现在我们需要找到元素meaning
,您可以使用xPath或_Element.find
,或者只使用硬编码索引,在本例中为BTW,它是1
,而不是{ {1}}。我在这里使用2
:
find
现在我们制作meaning = find('meaning')
并将其添加为<text>
的兄弟:
<meaning>
最后将text = body.makeelement('text')
meaning.addprevious(text)
移至<meaning>
:
<text>
请注意,拖尾文本也会移动,text.append(meaning)
实际上会移动节点。
答案 1 :(得分:0)
from xml.etree import ElementTree as etree
xml = """<body>
<part>verb</part>
love
<meaning>
<num>1.</num>
</meaning>
like
</body>"""
body = etree.fromstring(xml)
rest = body[1:] # all children after the first
del body[1:]
text_el = body.makeelement('text', {})
text_el.extend(rest)
body.append(text_el)
print(etree.tostring(body, encoding=str))
<body>
<part>verb</part>
love
<text><meaning>
<num>1.</num>
</meaning>
like
</text></body>