【发布时间】:2018-10-19 04:14:11
【问题描述】:
我正在尝试从不属于我的 XML 站点地图中解析 URL。不幸的是,有些 XML 写得不好,并且包含未转义/无效的字符,例如 & 符号。
这是我目前用来解析我的 XML 文件的代码块:
from xml.etree import ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
name_space = '{http://www.sitemaps.org/schemas/sitemap/0.9}'
urls = []
for child in root.iter():
for block in child.findall('{}url'.format(name_space)):
for url in block.findall('{}loc'.format(name_space)):
urls.append('{}\n'.format(url.text))
with open('sample_urls.txt', 'w+') as f:
f.writelines(urls)
遇到未转义的 URL 时遇到此错误:ParseError: not well-formed (invalid token)。
如何避免这些问题并继续解析文件?我遇到了 xml.sax.saxutils 模块的 escape() 功能,但根据我目前的情况不确定应用它的最佳方式。
【问题讨论】:
-
我找到了一种解决方法来忽略这些问题,方法是切换到 lxml 工具包下的 etree 并添加 'parser = ET.XMLParser(recover=True)' 和 'tree = ET.parse('test.xml ',解析器=解析器)'。这似乎删除了有问题的 URL 部分并继续。没有逃跑的想法,但可以在紧要关头工作。
-
您不能预处理 XML 并删除所有无效字符吗?当然,您无法避免例如未关闭的元素,但这应该是一个开始。如果您可以发布一些带有您遇到的错误的 XML sn-ps,那就太好了。
-
我遇到的问题是弄清楚如何在不弄乱 XML 的有效部分的情况下进行预处理。我只需要转义 url 节点中的内容。这是一个损坏的 XML 站点地图示例:samsclub.com/sitemap_products_1.xml
标签: python xml python-3.x elementtree