0

有一个这样的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)
4

2 回答 2

0

让我们从你得到的地方开始:

body = ET.fromstring(xml) 

现在我们需要定位元素meaning,您可以使用 xPath 或_Element.find,或者只使用硬编码索引,在这种情况下,顺便说一句,它是1,不是2。我在find这里使用:

meaning = find('meaning')

现在我们制作 a<text>并将其添加为 的兄弟<meaning>

text = body.makeelement('text')
meaning.addprevious(text)

最后<meaning>进入<text>

text.append(meaning)

请注意,拖尾文本也会移动,并且append实际上会移动节点。

于 2013-02-02T06:59:05.923 回答
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>
于 2013-02-02T08:10:00.620 回答