相关疑难解决方法(0)

实体引用和lxml

这是我的代码:

from cStringIO import StringIO
from lxml import etree

xml = StringIO('''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY test "This is a test">
]>
<root>
  <sub>&test;</sub>
</root>''')

d1 = etree.parse(xml)
print '%r' % d1.find('/sub').text

parser = etree.XMLParser(resolve_entities=False)
d2 = etree.parse(xml, parser=parser)
print '%r' % d2.find('/sub').text
Run Code Online (Sandbox Code Playgroud)

这是输出:

'This is a test'
None
Run Code Online (Sandbox Code Playgroud)

如何让lxml给我'&test;',即原始实体参考?

python xml lxml

9
推荐指数
1
解决办法
3062
查看次数

xml.etree.ElementTree.ParseError -- 异常处理未捕获错误

我正在尝试解析一个 xml 文档,该文档包含许多未定义的实体,当我尝试运行代码时,这些实体会导致 ParseError ,如下所示:

import xml.etree.ElementTree as ET

tree = ET.parse('cic.fam_lat.xml')
root = tree.getroot()

while True:
    try:
        for name in root.iter('name'):
            print(root.tag, name.text)
    except xml.etree.ElementTree.ParseError:
        pass

for name in root.iter('name'):
    print(name.text)
Run Code Online (Sandbox Code Playgroud)

该错误的示例如下,有许多未定义的实体都会抛出相同的错误: 错误描述

我只是想忽略它们,而不是进去编辑每一个。我应该如何编辑异常处理来捕获这些错误实例?(即,我做错了什么?)

python xml elementtree

5
推荐指数
1
解决办法
2万
查看次数

如何使用&nbsp;等实体解析HTML 在Python 2和Python 3中使用内置库ElementTree?

有时您想要解析一些格式合理的HTML页面,但是您不愿意引入额外的库依赖项,例如BeautifulSoup或lxml.因此,您可能希望首先尝试内置的ElementTree,因为它是一个标准库,它很快(在C中实现),并且它支持比基本HTMLParser更好的接口(例如XPATH支持).更不用说,HTMLParser有其自身的局限性.

ElementTree将工作,直到它遇到某些实体,例如&nbsp;,默认情况下不处理的实体.

import xml.etree.ElementTree as ET

html = '''<html>
    <div>Some reasonably well-formed HTML content.</div>
    <form action="login">
    <input name="foo" value="bar"/>
    <input name="username"/><input name="password"/>

    <div>It is not unusual to see &nbsp; in an HTML page.</div>

    </form></html>'''
et = ET.fromstring(html)
Run Code Online (Sandbox Code Playgroud)

在Python 2或Python 3上运行它,您将看到此错误:

xml.etree.ElementTree.ParseError: undefined entity: line 7, column 38
Run Code Online (Sandbox Code Playgroud)

那里有一些问答,比如这个那个问答.他们暗示使用ElementTree.XMLParser().parser.UseForeignDTD(True)但我无法在Python 3.3和Python 3.4中使用它.

$ python3.3
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 01:12:57) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type …
Run Code Online (Sandbox Code Playgroud)

html python parsing entity elementtree

1
推荐指数
1
解决办法
2095
查看次数

标签 统计

python ×3

elementtree ×2

xml ×2

entity ×1

html ×1

lxml ×1

parsing ×1