我是 Python 2.7 的新手,我正在尝试解析一个包含 HTML 的 XML 文件。我想解析自定义 XML 标记而不解析任何 HTML 内容。最好的方法是什么?(如果有帮助,我的自定义 XML 标记列表很小,所以如果有一个 XML 解析器可以选择只解析指定的标记,这可能会正常工作。)
例如,我有一个 XML 文件,看起来像
<myTag1 myAttrib="value">
<myTag2>
<p>My what a lovely day.</p>
</myTag2>
</myTag1>
我希望能够解析除 HTML 之外的所有内容,尤其是将 myTag2 的值提取为未解析的 HTML。
编辑:这里有更多信息来回答下面的问题。我以前尝试过使用 ElementTree。这就是发生的事情:
root = ET.fromstring(xmlstring)
root.tag # returns 'myTag1'
root[0].tag # returns 'myTag2'
root[0].text # returns None, but I want it to return the HTML string
我想要的 HTML 字符串已被解析并存储为标签和文本:
root[0][0].tag # returns 'p', but I don't even want root[0][0] to exist
root[0][0].text # returns 'My ... day.'
但我真的很想能够做这样的事情......
root[0].unparsedtext # returns '<p>My ... day.</p>'
解决方案:
har07 的回答效果很好。我稍微修改了该代码以解决极端情况。这是我正在实施的:
def _getInner(element):
if element.text == None:
textStr = ''
else:
textStr = element.text
return textStr + ''.join(ET.tostring(e) for e in element)
那么如果
element = ET.fromstring('<myTag>Let us be <b>gratuitous</b> with tags</myTag>')
原始代码将仅返回以第一个 XML 格式标记开头的文本,但修改后的版本将捕获所需的文本:
''.join(ET.tostring(e) for e in element) # returns '<b>gratuitous</b> with tags'
_getInner(element) # returns 'Let us be <b>gratuitous</b> with tags'