Переключившись с Fedora 17 на 18, я получаю различное поведение синтаксического анализа для одного и того же кода lxml, по-видимому, из-за разных версий базовых библиотек (версии libxml2 и libxslt изменены).Как управлять обработкой новой строки в функции lxml xpath text()?
Вот пример LXML кода с различными результатами для двух версий:
from io import BytesIO
from lxml import etree
myHtmlString = \
'<!doctype html public "-//w3c//dtd html 4.0 transitional//en">\r\n'+\
'<html>\r\n'+\
'<head>\r\n'+\
' <title>Title</title>\r\n'+\
'</head>\r\n'+\
'<body/>\r\n'+\
'</html>\r\n'
myFile = BytesIO(myHtmlString)
myTree = etree.parse(myFile, etree.HTMLParser())
myTextElements = myTree.xpath("//text()")
myFullText = ''.join([myEl for myEl in myTextElements])
assert myFullText == 'Title', repr(myFullText)
версия f17 проходит утверждают, т.е. xpath("//text()")
возвращает только текст 'Title'
, в то время как версия f18 завершается с выходом
Traceback (most recent call last):
File "TestLxml.py", line 17, in <module>
assert myFullText == 'Title', repr(myFullText)
AssertionError: '\r\n\r\n Title\r\n\r\n\r\n'
По-видимому, версия f18 обрабатывает символы новой строки и пробелы, отличные от версии f17.
Есть ли способ контролировать это поведение? (Необязательный аргумент где-нибудь?) Или еще лучше, есть ли способ вернуть прежнее поведение с помощью новых библиотек?