【发布时间】:2015-11-30 16:24:40
【问题描述】:
所以我有一个大的 xml 文件,其中包含我正在解析的数据。下面是一个例子:
<statement>
<plist>
<p>Hello Stack Overflow.</p>
<p>This doesn't <mark type="NA" /> seem to work!</p>
</plist>
</statement>
我开发的程序只返回“Hello Stack Overflow。这不会” 为了解析该行的其余部分,我想在解析之前删除标记标签。使用 root.findall('.//mark') 函数我能够找到标记,但是 root.remove(marks) 在循环 findall 函数的返回时不起作用,因为从根到这些标记的路径是未知的.我还尝试找到 p 标签的所有实例并在它们中搜索标记标签,然后使用“p tag”.remove(“mark tag”) 删除它们,这并没有失败,但似乎也没有工作。有什么建议吗?
这不是需要 lxml 导入的任何内容的重复,因为这可能没有依赖关系,并且必须仅使用元素树功能来解决。
【问题讨论】:
-
要移除一个元素,你显然需要知道元素的parent。您是否查看过
ElementTree元素上可用的方法? -
是的,没有直接访问父节点的方法。但正如我之前所说,所有标记标签都位于由 p 标签包围的文本中。因此,通过遍历所有 p 标记并检查是否包含“标记”,我可以找到父节点(p 标记)并使用它来删除标记标记。但是,在我完成此操作并尝试解析文本后,文本仍会在标记标记所在的位置(或仍然是)处截断。所以我有点茫然。
-
有是直接访问父节点的方法。
-
怎么样?我阅读的所有文档似乎都指定您无法设计。
标签: python xml xml-parsing elementtree