2014-02-11 2 views
0

У меня есть строка, как показано ниже.Очистка HTML-файлов, сохраняющих пользовательские теги

<GPE>LUSAKA</GPE> (<ORG>AP</ORG>) -- X&Y Ltd. &amp; M.K. Ltd will be merged. 

Как я могу сделать это действительным XML, чтобы мой etree.XMLParser не выдавал ошибку. Мне нужно преобразовать его в нечто подобное.

<GPE>LUSAKA</GPE> (<ORG>AP</ORG>) -- X&amp;Y Ltd. &amp; M.K. Ltd will be merged. 

Для этого я пытался использовать tidylib. Но он удалил все пользовательские теги. Увидеть код

options = { 
    'wrap': 0, 
    'indent': 0, 
    'output-xhtml': 1, 
    'numeric-entities': 1 
} 
html, warnings = tidylib.tidy_fragment(data, options) 

Выход

LUSAKA (AP) -- X&amp;Y Ltd. &amp; M.K. Ltd will be merged. 

ответ

1
>>> from lxml import etree 
>>> tree = etree.fromstring('<GPE>LUSAKA</GPE> (<ORG>AP</ORG>) -- X&Y Ltd. &amp; M.K. Ltd will be merged.', etree.HTMLParser()) 
>>> etree.tostring(tree) 
'<html><body><gpe>LUSAKA</gpe> (<org>AP</org>) -- X&amp;Y Ltd. &amp; M.K. Ltd will be merged.</body></html>' 
>>> tree.xpath('//gpe/text()') 
['LUSAKA'] 
+0

Wow! Это поразительно. Ощущение нуба, задающего такой вопрос. BTW любой способ удалить '' tags? Я имею в виду, есть ли какие-то варианты для этого? –

+0

Не думаю, что так ... Боюсь, что это связано с возможностью разбора ... –

+0

Я могу разобрать. Мне нужно убедиться, что он добавляет только и теги, но больше ничего. –