【问题标题】:How to escape XML special characters in python SAX parser?如何在 python SAX 解析器中转义 XML 特殊字符?
【发布时间】: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')

问题是 &lt;Text&gt; 标签包含 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


    【解决方案1】:
    def characters(self, content):
      if self.current == "Text":
      self.Text = re.sub('[<>,]', '', content)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多