为了简化问题,就把xml的内容简化为如下的形式:

<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是任性]]></da></DOCUMENT>

它的encoding为gbk,其中的节点有一个为中文字符
使用lxml提取节点的值时出现了如下的异常

lxml.etree.XMLSyntaxError: Extra content at the end of the document

此时对应的Python脚本为:

tst = u'<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是任性]]></da></DOCUMENT>'for event,element in etree.iterparse(BytesIO(tst.encode('utf-8'))):    print("%s, %s" % (element.tag, element.text))

不过简化之前,报的是另外一个异常

lxml.etree.XMLSyntaxError: input conversion failed due to input error, bytes 0x8B 0x2C 0xE6 0x9D

不论异常是哪一个,猜测还是和字符的编码形式有关。
经过各种尝试无果,后来在stackoverflow上看到这篇文章,文中提到的问题和xml中的encoding值有关,尝试了增加了一段代码

tst = u'<?xml version="1.0" encoding="gbk"?><DOCUMENT><da><![CDATA[中文,就是任性]]></da></DOCUMENT>'tst = tst.replace('encoding="gbk"', 'encoding="utf-8"')for event,element in etree.iterparse(BytesIO(tst.encode('utf-8'))):    print("%s, %s" % (element.tag, element.text))

增加了一个替换的语句,将之前的encoding="gbk"替换成encoding:"utf-8"
于是终于得到了结果:

da, 中文,就是任性DOCUMENT, None

更多相关文章

  1. 详解XML命名空间(XML Namespaces)介绍以及节点读取方法的示例代码
  2. xml创建根节点、子节点的示例代码分享
  3. 详解JSTL读取xml中文乱码解决的案例
  4. java通过XPath解析xml节点的代码详解
  5. 有关xml节点的文章推荐10篇
  6. Vue.js流程图插件 可自定义流程节点事件
  7. hadoop 3节点高可用分布式安装
  8. 【从0到1学习边缘容器系列-4】弱网环境利器之分布式节点状态判定
  9. 分布式作业 Elastic-Job-Lite 源码分析 —— 主节点选举

随机推荐

  1. Android几款著名的ActiveSync客户端
  2. android 在SD卡创建文件夹
  3. Android 通信录中的联系人操作
  4. Android SDK Tools R15 发布
  5. android 复制、粘贴文字
  6. android 新手学习笔记 点击事件
  7. Spinner下拉位置处理
  8. JAVA设计模式之Template method
  9. 教你如何用最新的技术快速开发一个完整的
  10. 【Android】性能分析工具:开篇