2

Python 2.7でlxmlを使用してEvernoteマークアップ言語(ENML)を解析しようとしています。ENMLはXHTMLのスーパーセットです。

from StringIO import StringIO
import lxml.etree as etree

if __name__ == '__main__':
    xml_str = StringIO('<?xml version="1.0" encoding="UTF-8"?>\r\n<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">\r\n\r\n<en-note style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">\nA really simple example. &nbsp;Another sentence.\n</en-note>')
    tree = etree.parse(xml_str)

上記のコードは次のエラーでエラーになります。

XMLSyntaxError: Entity 'nbsp' not defined, line 5, column 32

ENMLを正常に解析するにはどうすればよいですか?

4

2 に答える 2

3

&nbsp;XMLパーサーではなく、HTMLパーサーによって理解されます。

from StringIO import StringIO
import lxml.html as LH
if __name__ == '__main__':
    xml_str = StringIO('<?xml version="1.0" encoding="UTF-8"?>\r\n<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">\r\n\r\n<en-note style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">\nA really simple example. &nbsp;Another sentence.\n</en-note>')
    tree = LH.parse(xml_str)
    print(LH.tostring(tree))
于 2013-02-27T02:10:55.223 に答える
0

エンティティ名を数値に置き換えてみることができます。

http://www.w3schools.com/tags/ref_entities.asp

于 2013-02-27T04:08:24.347 に答える