【问题标题】:How to parse xml statement with tags inside the text如何解析带有文本内标签的xml语句
【发布时间】:2015-11-29 17:08:53
【问题描述】:

如何在 python 中解析以下内容以获取 <p> 括号之间但没有 <mark> 标记或值的文本?最好使用 ElementTree 功能

<plist>
<p>Hello there? <mark type="ph"/> How are you?</p>
</plist>

解析以下内容应该返回 'Hello There?你好吗?

谢谢!

【问题讨论】:

  • 还应该注意,这个 xml 是一个更大的块的一部分,所以如果它很容易迭代就好了。
  • How do I parse XML in Python? 的可能重复项
  • @John 我不认为这个是重复的。这个问题可能缺乏解决问题的尝试,但总的来说,问题是明确的并且是关于特定用例的。谢谢。
  • 我确实试图解决,只是没有包括它们。我尝试在一个子句中检查标记标签,但是,找到它们并不允许我在没有它们的情况下进行解析。此外,如果我试图只使用 ElementTree .text 功能,但会在标记标记处切断字符串。

标签: python xml xml-parsing elementtree


【解决方案1】:

如果是lxml.etree,可以使用string() XPath 函数:

from lxml.etree import fromstring

data = """
<plist>
<p>Hello there? <mark type="ph"/> How are you?</p>
</plist>
"""

root = fromstring(data)
for p in root.xpath("//plist/p"):
    print p.xpath("string()")

打印:

Hello there?  How are you?

【讨论】:

  • 我考虑过这一点,但希望将我的依赖项限制在 ElementTree 上。您还知道其他替代方案吗?
  • @JJJ1106 你可以用xml.etree.ElementTree 解决它,但它不会像lxml.etree 那样简洁和简单,因为只提供有限的XPath 支持。为什么不使用 Python 生态系统中的东西来解决问题?
  • 好点,所以因为我已经在我的 xml 中迭代到这一点,使用起始节点并沿着层次结构向下工作,lxml.etree 函数中的这个 string() 可以在元素对象上工作类型?还是我必须先把它变成一个字符串?
猜你喜欢
  • 1970-01-01
  • 2019-12-06
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2013-11-19
  • 2015-04-28
相关资源
最近更新 更多