python sax模块解析xml遇到非法字符怎么解决?

问题描述

python sax模块解析xml遇到非法字符怎么解决? 1C
用python的sax模块解析xml的时候出现非法字符直接停止了,百度搜到有大神说用回调函数处理当前的非法字符或者跳过直接运行接下来的内容。不过具体应该怎么实现呢?求大神赐教。下面是我的代码,非法字符是出现再其中的很多个tagname=""url""中的内容,能在原来的基础上改就更好了,再次感谢

import xml.saxclass XmlHandler( xml.sax.ContentHandler ):    def __init__(self):        self.CurrentData = """"        self.url = """"        self.id = """"        self.detail = """"   # 元素开始事件处理    def startElement(self nameattr):        self.CurrentData = name        if name == ""entry"":            print(""*****Entry*****"")   # 元素结束事件处理    def endElement(self name):        if self.CurrentData == ""url"":            print(""url:"" self.url)        elif self.CurrentData == ""phish_id"":            print(""phish_id:"" self.id)        elif self.CurrentData == ""phish_detail_url"":            print(""phish_detail_url:"" self.detail)        self.CurrentData = """"   # 内容事件处理    def characters(self content):        if self.CurrentData == ""url"":            self.url = content        elif self.CurrentData == ""phish_id"":            self.id = content        elif self.CurrentData == ""phish_detail_url"":            self.detail = content        else:if __name__ == ""__main__"":    # 创建一个 XMLReader    parser = xml.sax.make_parser()    # turn off namepsaces    parser.setFeature(xml.sax.handler.feature_namespaces 0)    # 重写 ContextHandler    Handler = XmlHandler()    parser.setContentHandler( Handler )    parser.parse(""online-valid.xml"")

解决方案

这是一个非法的 XML,正常的解析应该拿它没办法。

如果你确定这个 XML 文档里面不可能出现任何的 XML entity,可以先替换 & 字符为 & 再解析。

解决方案二:
python编码转换遇到的非法字符的解决方法

时间: 2024-06-03 02:04:41

python sax模块解析xml遇到非法字符怎么解决?的相关文章

Android网络之数据解析----SAX方式解析XML数据

[正文] 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器获取数据.不过这个时候就有一个问题,这些数据是以什么格式在网络上传输的呢?一般我们都会在网络上传输一些格式化后的数据,这种数据会有一定的结构规格和语言,当另一方受到数据消息后就可以按照相同的结构规格进行解析,从而取出它想要的那部分内容. 在网络上传输数据最常用的格式:XML和Json.本文就来学习一下XML数据的解析,Json格式的数据解析将在下一篇文

Python HTMLParser模块解析html获取url实例_python

HTMLParser是python用来解析html的模块.它可以分析出html里面的标签.数据等等,是一种处理html的简便途径.HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理.它主要的用户回调函数的命名都是以handler_开头的,都是HTMLParser的成员函数.当我们使用时,就从HTMLParser派生出新的类,然后重新定义这几个以handler_开头的函数即可.这几个函数包括: handle_

Java眼中的XML--文件读取--2 应用SAX方式解析XML

1.获取一个SAXParserFactory的实例.2.通过factory获取SAXParser实例. 3.新建一个包和继承自DefaultHandler的类. 因为SAX遍历方式,比如便利一个节点<a></a>是需要startHandler便利起始标签<a>,还需要endHandler便利结束标签</a>. 4.将XML文件路径和SAXParserHandler实例对象作为 SAXParser对象 的参数使用.然后运行验证执行初始情况. 5.在SAXPar

python inspect模块解析

来源:https://my.oschina.net/taisha/blog/55597 inspect模块主要提供了四种用处: (1) 对是否是模块,框架,函数等进行类型检查. (2) 获取源码 (3) 获取类或函数的参数的信息 (4) 解析堆栈 使用inspect模块可以提供自省功能,下面是关于自省的一些介绍: 首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding: UTF-8 import sys # 模块,sys指向这个模块对象 import inspect def f

Python struct模块解析_python

python提供了一个struct模块来提供转换.下面就介绍这个模块中的几个方法.     struct.pack(): struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组).其函数原型为:struct.pack(fmt, v1, v2, ...),参数fmt是格式字符串,关于格式字符串的相关信息下面有所介绍.v1, v2, ...表示要转换的python值.下面的例子将两个整数转换为字符串

SAX简单解析XML

package com.zkn.xmlparse.text; import java.io.File; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * <p>Title: </p> * * <p>Description: </

Python中使用ElementTree解析XML示例

  这篇文章主要介绍了Python中使用ElementTree解析XML示例,本文同时讲解了XML基本概念介绍.XML几种解析方法和ElementTree解析实例,需要的朋友可以参考下 [XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. 概念一: 代码如下: # foo元素的起始标签 # foo元素的结束标签 # note: 每一个起始标签必须有对应的结束标签来闭合, 也可以写成 概念二: 代码如下: #

Android中使用sax解析xml文件的方法_Android

SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备. SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML 语法中的某部分,如果符合就会触发事件.所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口.下面是一些ContentHandler接口常用的方法: startDocument():当遇到文档的开头的时候,调用

PHP用SAX解析XML的实现代码与问题分析_php技巧

复制代码 代码如下: <?php $g_books = array(); $g_elem = null; function startElement( $parser, $name, $attrs ) { global $g_books, $g_elem; if ( $name == 'BOOK' ) $g_books []= array(); $g_elem = $name; } function endElement( $parser, $name ) { global $g_elem; $