在没有 Etree 的情况下提取 XML 键的字符串/值

Posted

技术标签:

【中文标题】在没有 Etree 的情况下提取 XML 键的字符串/值【英文标题】:Extract String/Value of XML Key Without Etree 【发布时间】:2018-03-31 12:13:38 【问题描述】:

我需要从 xml 文件中提取字符串,但不使用 etree。

XML 的一小部分:

<key>FDisplayName</key>
<string>Dripo</string>
<key>CFBundleIdentifier</key>
<string>com.getdripo.dripo</string>
<key>DTXcode</key>

假设我想提取com.getdripo.dripo,我怎么能这样做,但不使用etree?

我只知道如何用etree来做,但是在这种情况下我不能使用它。

在网上找不到任何东西,有什么想法吗?

【问题讨论】:

... 自己编写一个完整的 XML 解析器?还是使用常规字符串函数?顺便问一下,etree 有什么问题? @usr2564301 我在安装模块时遇到问题(在 ios 上) @mhawke 哦,是的。 Python 2.7.8 你在 iOS 上使用什么 Python,Pythonista?它应该在标准库中有etree。还有其他解析器如xml.dom.minidom 【参考方案1】:

使用正则表达式。

import re
s = """<key>FDisplayName</key>
<string>Dripo</string>
<key>CFBundleIdentifier</key>
<string>com.getdripo.dripo</string>
<key>DTXcode</key>"""

print re.findall("<string>(.*?)</string>", s)      #finds all content between '<string>' tag
print re.findall("<string>(com.*?)</string>", s)

输出:

['Dripo', 'com.getdripo.dripo']
['com.getdripo.dripo']

注意:强烈建议使用 XML 解析器。

【讨论】:

以上是关于在没有 Etree 的情况下提取 XML 键的字符串/值的主要内容,如果未能解决你的问题,请参考以下文章

从值标签Etree XML python中提取文本

Unicode 字符串的 lxml.etree.XML ValueError

对象解析

在 json 文档中没有指定键的 bigquery 中从 json 字符串中提取键和值

如何解决 lxml中找不到etree等问题

使用 Python Etree 解析 XML 并返回指定的标签而不考虑命名空间