python - 使用 Python 3 解析 xml 中的 html(或其他 xml)

标签 python html xml xml-parsing lxml

我正在尝试解析嵌入或包含在 XML 中的 html 的大文件。我已经能够提取主 xml 的全部内容,但无法访问嵌入 html 的内容。

例如,我有一个以下结构的文件:

<TitleContentExtra>Part 1</TitleContentExtra><SubTitle /><TitleOriginal /><Abstract /><FullText>
&lt;p&gt;&lt;strong class="grey" id="authordate"&gt; &lt;span class="gray pointer"&gt;Argh, &lt;em&gt;et al.&lt;/em&gt; 2001 [+] &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="bkg_gray" id="authordate2_container" style="display: none;"&gt;
&lt;p&gt;It is a big product [some_product]:[bib2bib]&lt;/p&gt;
&lt;ul class="ul_style_1"&gt;
    &lt;li&gt;More text goes here &lt;/li&gt;
    &lt;li&gt;Why do I have to do it? &lt;strong class="gray"&gt;Some text goes there&lt;/strong&gt; &lt;/li&gt;
</FullText><FullTextOriginal /><FullTextComment>
&lt;ol class="ol_style_3" id="notes_container"&gt;
    &lt;li&gt;&lt;span id="note_a"&gt;&lt;a name="notea"&gt;&lt;/a&gt;Extra information here.&lt;/span&gt;&lt;/li&gt;
</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/

相关文章:

python - Django 静态路径设置不正确

python - swig:扩展类模板以提供 __str__

HTML.EditorFor 添加类不起作用

javascript - 那里有好的 JS 范围日期选择器控件吗?

javascript - 如何使用 JavaScript 解析附加的 XML 代码?

java - 将 xml 字符串转换为 JSON 字符串,而不使用第三方库

java - 在 Java 中查找没有正确命名空间的节点中的元素

python - 尽管解释器是 3.9,但 Pycharm 正在为 Python 3.6 版生成语言错误

python - 如何使用交叉验证获得最佳系数向量

html - 选择最后一个没有指定类(class)的 child