2013-10-11 2 views
-2

I'm currenlty сталкивается с проблемой с математическими уравнениями, содержащими символы '<'. Если я разбираю их с помощью lxml, строка обрезается.Parse '<' Символ с lxml

Есть ли способ сказать синтаксическому анализатору не удалять неизвестные теги (я думаю, это проблема), но сохранить их такими, какие они есть?

например

s="<div> This is a text with mathjax like $1<2$, let's see if this works till here $2>1$! </div>" 
from lxml import html 
tree=html.fragment_fromstring(s) 
html.tostring(tree) 

дает:

'<div> This is a text with mathjax like $11$! </div>' 

Было бы хорошо, если '<' не получает избежал ничего обрезаны.

Я полностью осознаю, что это недопустимо xml. Но, к сожалению, я не могу заменить символы «<» правильным символом, экранированным html в источнике, потому что на самом деле, я пытаюсь проанализировать файл разметки, содержащий html-теги, и символ < является совершенно прекрасным символом здесь.

Спасибо!

Jakob

+2

, поскольку строка не правильно убежали в вашем XML –

+0

@ user2799617 Конечно это не так! В этом проблема и причина вопроса! – Jakob

ответ

0

Lxml один здесь не работает, но с помощью BeautifulSoup работает отлично!

s1="This is a text with mathjax like $1<2$, let's see if this works till here $2>1$!" 
import lxml.html.soupparser as sp 
from lxml import html 
soup1 = sp.fromstring(s1) 
print sp.unescape(html.tostring(soup1, encoding='unicode')) 

дает

<html>This is a text with mathjax like $1<2$, let's see if this works till here $2>1$!</html> 
4

Если вы используете XML-парсер для разбора то, что не является допустимым XML, то вы не используете правильный инструмент для работы.

Другие решения могут быть либо написать собственный парсер или первый передать свой контент уценки к уценки двигателя (ср https://github.com/trentm/python-markdown2 или https://pypi.python.org/pypi/Markdown), чтобы превратить его в надлежащий HTML затем разобрать этот HTML с использованием HTML-парсер LXML (или любой другой HTML-парсер FWIW).

+0

Ну, в конце концов, я использую pandoc, чтобы преобразовать это в латекс, и pandoc strips raw html-теги (поэтому я не могу использовать его в первую очередь) :(Но, может быть, может быть применен некоторый другой промежуточный анализатор разметки. – Jakob

+0

нужно внести свое собственное решение. –

+0

Моя первоначальная идея заключалась в том, чтобы получить lxml, чтобы избежать «<» (если не часть тега html), как это делается с eg &. Таким образом, достаточно простого подпоследовательного unescape. – Jakob

Смежные вопросы