【发布时间】:2022-12-11 15:31:00
【问题描述】:
我正在尝试解析大型 XML 文档并仅提取 <Text> 标记内容。
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<EchoroukonlineData>
<Echoroukonline>
<ID>SHG_ARB_0000001</ID>
<URL>http://www.echoroukonline.com/ara/articles/1.html</URL>
<Headline>title</Headline>
<Dateline>2008/02/22</Dateline>
<Text>Text that should be parsed <!--><li><p><--></Text>
</Echoroukonline>
</EchoroukonlineData>
我正在使用 SAX 解析器来执行此任务,如下所示:
import xml.sax
import pandas as pd
from xml.sax.saxutils import escape
articles = []
class articlesHandler(xml.sax.ContentHandler):
def startElement(self, name, attrs):
self.current = name
def characters(self, content):
if self.current == "Text":
self.Text = content
def endElement(self, name):
if self.current == "Text":
text=self.Text
articles.append(text)
handler = articlesHandler()
parser = xml.sax.make_parser()
parser.setContentHandler(handler)
parser.parse('dataset.xml')
问题是 <Text> 标签包含 XML 特殊字符,如 <、>,我想忽略这些特殊字符。
有一个函数可以转义特殊字符xml.sax.saxutils.escape(data)。
我在 characters() 函数中使用它如下:
def characters(self, content):
if self.current == "Text":
self.Text = escape(content)
但它仍然不起作用。
报错信息:xml.sax._exceptions.SAXParseException: dataset.xml:8:1756: not well-formed (invalid token)
【问题讨论】:
标签: python parsing xml-parsing sax saxparser