gpt4 book ai didi

python - 在 Python 中,解析自定义 XML 标签而不解析 HTML

转载 作者:行者123 更新时间:2023-11-30 23:08:53 30 4
gpt4 key购买 nike

我是 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'

最佳答案

我认为没有一种简单的方法可以修改 XML 解析器行为以忽略某些预定义的标记。一种更简单的方法是让解析器正常解析 XML,然后您可以为此目的创建一个返回元素的未解析内容的函数,例如:

import xml.etree.ElementTree as ET

def getUnparsedContent(element):
return ''.join(ET.tostring(e) for e in element)

xmlstring = """<myTag1 myAttrib="value">
<myTag2>
<p>My what a lovely day.</p>
</myTag2>
</myTag1>"""

root = ET.fromstring(xmlstring)
print(getUnparsedContent(root[0]))

输出:

<p>My what a lovely day.</p>

关于python - 在 Python 中,解析自定义 XML 标签而不解析 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31497856/

30 4 0