如何在python SAX解析器中转义XML特殊字符?

How to escape XML special characters in python SAX parser?

提问人:Ahmed Basem 提问时间:12/9/2022 更新时间:12/9/2022 访问量:243

问:

我正在尝试解析一个大型 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')

问题是标签包含XML特殊字符,如<,>,我想忽略这些特殊字符。 有一个函数可以转义特殊字符。 我在函数中使用它如下:<Text>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 xml-解析 sax saxparser

评论

0赞 mzjn 12/10/2022
问题中的 XML 格式正确,因此错误消息必须由其他 XML 文档引起。

答:

0赞 Anjani Gourisaria 12/9/2022 #1
def characters(self, content):
  if self.current == "Text":
  self.Text = re.sub('[<>,]', '', content)

这将从 XML 文本中删除任何“<”、“>”或“”字符,然后再将其存储在“self.Text“变量。