2013-10-11 98 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