我有一个HTML文件,它的底部包含XML并用注释括起来,它看起来如下所示:

<!DOCTYPE html>
<html>
<head>
    ***
</head>
<body>
    <div class="panel panel-primary call__report-modal-panel">
        <div class="panel-heading text-center custom-panel-heading">
            <h2>Report</h2>
        </div>
        <div class="panel-body">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <div class="panel-title">Info</div>
                </div>
                <div class="panel-body">
                    <table class="table table-bordered table-page-break-auto table-layout-fixed">
                        <tr>
                            <td class="col-sm-4">ID</td>
                            <td class="col-sm-8">1</td>
                        </tr>

            </table>
        </div>
    </div>
</body>
</html>
<!--<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<ROOTTAG>
  <mytag>
    <headername>BASE</headername>
    <fieldname>NAME</fieldname>
    <val><![CDATA[Testcase]]></val>
  </mytag>
  <mytag>
    <headername>BASE</headername>
    <fieldname>AGE</fieldname>
    <val><![CDATA[5]]></val>
  </mytag>

</ROOTTAG>
-->

要求是解析上面的HTML中的注释中的XML. 到目前为止,我已经try 读取该HTML文件并将其传递给一个字符串,并执行了以下操作:

with open('my_html.html', 'rb') as file:
    d = str(file.read())
    d2 = d[d.index('<!--') + 4:d.index('-->')]
    d3 = "'''"+d2+"'''"

这是在字符串d3中返回具有3个单qoute的XML数据片段.

然后试着通过Etree阅读它:

ET.fromstring(d3)

但它失败了,错误如下:

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 2

基本上需要一些帮助来:

  • 阅读Html
  • 取出带有在HTML底部注释的XML片段的代码片段
  • 获取该字符串并将其传递给ET.from字符串()函数,但由于该函数获取带有三重qoutes字符串,因此没有正确格式化它,从而引发错误

推荐答案

你已经走上了正确的道路.我把你的超文本标记语言放在文件里,它就能很好地工作,如下所示.

import xml.etree.ElementTree as ET

with open('extract_xml.html') as handle:
    content = handle.read()
    xml = content[content.index('<!--')+4: content.index('-->')]
    document = ET.fromstring(xml)

    for element in document.findall("./mytag"):
        for child in element:
            print(child, child.text)

Python相关问答推荐

Pythind 11无法弄清楚如何访问tuple元素

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

将输入管道传输到正在运行的Python脚本中

如何在虚拟Python环境中运行Python程序?

在Python中管理打开对话框

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

PyQt5,如何使每个对象的 colored颜色 不同?'

梯度下降:简化要素集的运行时间比原始要素集长

在单次扫描中创建列表

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

为什么我的sundaram筛这么低效

计算空值

我对这个简单的异步者的例子有什么错误的理解吗?

如何根据rame中的列值分别分组值

504未连接IB API TWS错误—即使API连接显示已接受''

当输入是字典时,`pandas. concat`如何工作?

SpaCy:Regex模式在基于规则的匹配器中不起作用

随机森林n_估计器的计算

Match-Case构造中的对象可调用性测试

解析CSV文件以将详细信息添加到XML文件