python-通过xml属性对字符串进行排序,.text将xml数据格式化

python-通过xml属性对字符串进行排序,.text将xml数据格式化,python,xml,elementtree,Python,Xml,Elementtree,这非常有效,但是如果字符串以like开头,它会严重损坏。 前 %s Odovzdávanie do 变成 <string name="uploading_to"><b>%s</b> Odovzdávanie do</string> 我研究了xml.etree元素类,但它似乎只有.text方法。我只需要一种方法将所有内容都放在xml标记之间。不,我不能更改输入数据。它直接来自一个准备翻译的Android APK,除了必须是有效的XML And

这非常有效,但是如果字符串以like
开头,它会严重损坏。 前

%s Odovzdávanie do
变成

<string name="uploading_to"><b>%s</b> Odovzdávanie do</string>


我研究了xml.etree元素类,但它似乎只有.text方法。我只需要一种方法将所有内容都放在xml标记之间。不,我不能更改输入数据。它直接来自一个准备翻译的Android APK,除了必须是有效的XML Android代码之外,我无法预测数据是如何进入的。

我想您正在寻找
itertext()
方法
.text
仅返回直接包含在元素开头的文本:

<string name="uploading_to" />
如果您需要捕获包含的所有内容,那么您需要做更多的工作;捕获
.text
,并使用
ElementTree.tostring()
将每个子级强制转换为文本:


您似乎有混合的制表符和空格。现在,帖子中的缩进已经不正常了,你能清理一下吗?你希望
.text
包含*`
标记,还是它的内容?我无法让StackOverflow与Python一起正常工作。我把代码和正确的缩进一起贴了出来,结果它把代码搞糟了。我不是在胡闹。那是因为你在混合标签和空格。一旦发布,选项卡将以4个空格的宽度显示。使用文本编辑器将选项卡替换为8个空格,然后进行复制和粘贴。我已为您修复了此帖子中的选项卡。在该示例中,如果我想保留
,我将如何操作?我不能忽略嵌套元素,所以我想使用术语text是错误的。我需要主元素标记之间的所有文字。@ConnorTumbleson:更新以包含更多示例和捕获“innerHTML”版本的方法。我添加了一些检查以确保它有子元素,并且工作得很好。谢谢你的帮助和处理我不能把代码放在这样。
<string name="uploading_to" />
>>> test = ET.fromstring('<elem>Sometext <subelem>more text</subelem> rest</elem>')
>>> test.text
'Sometext '
>>> ''.join(test.itertext())
'Sometext more text rest'
>>> (test.text or '') + ''.join(child.tail for child in test.getchildren())
'Sometext  middle  rest'
>>> (test.text or '') + ''.join(ET.tostring(child) for child in test.getchildren())
'Sometext <subelem>more text</subelem> middle <subelem>other text</subelem> rest'
def innerxml(elem):
    return (elem.text or '') + ''.join(ET.tostring(child) for child in elem.getchildren())