gpt4 book ai didi

python - 如何在 Python 中获取两个 xml 标记之间的全部内容?

转载 作者:太空狗 更新时间:2023-10-29 17:32:55 25 4
gpt4 key购买 nike

我尝试获取起始 xml 标记和结束标记之间的全部内容。

获取像 title 这样的直接案例中的内容下面很简单,但是如果使用 mixed-content 并且我想保留内部标签,我怎样才能在标签之间获取全部内容

<?xml version="1.0" encoding="UTF-8"?>
<review>
<title>Some testing stuff</title>
<text sometimes="attribute">Some text with <extradata>data</extradata> in it.
It spans <sometag>multiple lines: <tag>one</tag>, <tag>two</tag>
or more</sometag>.</text>
</review>

我要的是两个之间的内容text 标签,包括任何标签:Some text with <extradata>data</extradata> in it. It spans <sometag>multiple lines: <tag>one</tag>, <tag>two</tag> or more</sometag>.

目前我使用正则表达式,但它有点乱,我不喜欢这种方法。我倾向于基于 XML 解析器的解决方案。我看了minidom , etree , lxmlBeautifulSoup但找不到这种情况的解决方案(全部内容,包括内部标签)。

最佳答案

这里有一些对我和你的样本有用的东西:

from lxml import etree
doc = etree.XML(
"""<?xml version="1.0" encoding="UTF-8"?>
<review>
<title>Some testing stuff</title>
<text>Some text with <extradata>data</extradata> in it.</text>
</review>"""
)

def flatten(seq):
r = []
for item in seq:
if isinstance(item,(str,unicode)):
r.append(unicode(item))
elif isinstance(item,(etree._Element,)):
r.append(etree.tostring(item,with_tail=False))
return u"".join(r)

print flatten(doc.xpath('/review/text/node()'))

产量:

Some text with <extradata>data</extradata> in it.

xpath选择<text>的所有子节点元素,如果它们是字符串/unicode 子类 (<class 'lxml.etree._ElementStringResult'>) 或调用 etree.tostring,则直接将它们呈现为 unicode如果它是一个 Element , with_tail=False避免重复尾部。

您可能需要处理其他节点类型(如果存在)。

关于python - 如何在 Python 中获取两个 xml 标记之间的全部内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11122397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com