2013-10-11 97 views
-2

我正在面对包含'<'符号的mathjax方程式问题。 如果我用lxml解析这些字符串,那么这个字符串会被裁剪掉。用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>' 

如果 '<' 被逃脱了什么冒出这将是罚款。

我完全知道这是无效的XML。但是,不幸的是,我不能用源代码中正确的html转义符号替换'<'符号,因为实际上,我试图解析包含html标记的降价文件,<符号在这里是一个完美的符号。

谢谢!

雅各布

+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,然后你不使用该工作的工具。

其他的解决办法是要么编写自定义解析器或先通过您的降价内容的降价引擎(CF https://github.com/trentm/python-markdown2https://pypi.python.org/pypi/Markdown)把它变成正确的HTML然后使用LXML的HTML解析器(或任何其他HTML解析器解析这个HTML FWIW)。

+0

嗯,事情是,我随后使用pandoc将其转换为latex,并且pandoc剥离了原始html标记(所以我不能先使用它):(但是,也许可以应用其他一些中间markdown解析器。 – Jakob

+0

因此,您将不得不推出你自己的解决方案 –

+0

我最初的想法是让lxml逃离'<'(如果不是html标签的一部分),就像使用eg这样做。这样一个简单的sub-sequential unescape就足够了。 – Jakob