我正在尝试解析嵌入或包含在 XML 中的 html 的大文件。我已经能够提取主 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 文本。我已经尝试了 soupparser、parse 等许多选项,但没有一个有效,或者我无法使它们工作。
我需要解析整个 xml 文件,以便稍后获取所有标签和属性的列表,以便进一步处理它们。
最佳答案
嗯,您的嵌入式 HTML 是 XML 转义的 - 显然您必须在尝试将其解析为 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)
...
关于python - 使用 Python 3 解析 xml 中的 html(或其他 xml),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35084615/