解析'<'符号与lxml

时间:2013-10-11 08:00:31

标签: python lxml mathjax

我目前面临包含'<'的mathjax方程的问题符号。 如果我用lxml解析这些字符串会被裁剪。

有没有办法告诉解析器不要删除未知标签(我猜这就是问题)但是保持原样?

E.g

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>'

如果'&lt;'那就好了。逃脱了没有任何裁剪。

我完全清楚这是无效的xml。但是,不幸的是,我无法取代'&lt;'在源代码中使用正确的html转义符号的符号,因为实际上,我正在尝试解析包含html标记的markdown文件和&lt;符号在这里是一个非常好的符号。

谢谢!

雅各布

2 个答案:

答案 0 :(得分:4)

如果您使用XML解析器来解析某些不是有效XML的内容,那么您就没有使用正确的工具来完成这项工作。

其他解决方案是编写自定义解析器或首先将降价内容传递给降价引擎(cf https://github.com/trentm/python-markdown2https://pypi.python.org/pypi/Markdown)将其转换为正确的HTML,然后使用lxml的HTML解析此HTML解析器(或任何其他HTML解析器FWIW)。

答案 1 :(得分: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>