我正在尝试解析嵌入了HTML或包含在XML中的大文件。我已经能够提取主要xml的全部内容,但我无法访问嵌入式html的内容。
例如,我会有一个这种结构的文件:
<TitleContentExtra>Part 1</TitleContentExtra><SubTitle /><TitleOriginal /><Abstract /><FullText>
<p><strong class="grey" id="authordate"> <span class="gray pointer">Argh, <em>et al.</em> 2001 [+] </span></strong></p>
<div class="bkg_gray" id="authordate2_container" style="display: none;">
<p>It is a big product [some_product]:[bib2bib]</p>
<ul class="ul_style_1">
<li>More text goes here </li>
<li>Why do I have to do it? <strong class="gray">Some text goes there</strong> </li>
</FullText><FullTextOriginal /><FullTextComment>
<ol class="ol_style_3" id="notes_container">
<li><span id="note_a"><a name="notea"></a>Extra information here.</span></li>
</FullTextComment>
我在Python 3中的代码就是这样的:
try:
from lxml import etree as ET
except ImportError:
import xml.etree.ElementTree as ET
tree = ET.ElementTree(file='Files\\xml_File.xml')
root = tree.getroot()
for child in root:
print (child.tag, child.attrib)
print ('\n------------------\n')
for elem in tree.iter():
#print (elem.tag, 'atrribute: ', elem.attrib)
for value in elem.getiterator(tag=elem.tag):
#print (value.text)
extags=str(value.text)
try:
xmldata=ET.fromstring(extags)
print (xmldata.tags)
except:
print ('There is an error: :', extags)
我无法解析嵌入的html / xml文本。我已经尝试了很多选择,包括解析器,解析,......但没有一个可行,或者我无法使它们工作。
我需要解析整个xml文件,以便稍后获取所有标记和属性的列表,以便进一步处理它们。
答案 0 :(得分:0)
那么,你的嵌入式HTML是XML-ecaped - 显然你必须在尝试将其解析为XML之前解除它。
Python3确实包含在html
stdlib模块中取消转义的快捷方式:
import html
...
extags=html.unescape(value.text)
try:
xmldata=ET.fromstring(extags)
print (xmldata.tags)
except:
print ('There is an error: :', extags)
...