如何从url解析xml

时间:2021-02-14 00:07:31

标签: python xml xml-parsing

一般来说,我想做的是从url解析xml。这就是我所做的:

  1. 我将 xml 代码写在 <'textarea'><'\textarea'> 标签中的 html 文件中:

    <textarea rows="1000" cols="200" style="border:none;">
    <?xml version="1.0"?>
    <data>
      <gambar>
        <id>wcl01</id>
        <url>https://1.bp.blogspot.com/- j9yARC6mAuY/Xp4aUTxe6eI/AAAAAAAAAGA/NegvRkwYdVAXhnTsrWoXYcjAzsHfR6BOQCLcBGAsYHQ/s320/Konferensi%2BIIWAS%2Bdi%2BVietnam.jpg</url>
      </gambar>
      <gambar>
        <id>wcl02</id>
        <url>https://1.bp.blogspot.com/-aIkYkd3ePMY/XqDDsTMYMAI/AAAAAAAAAHA/QKZOQ8cPr_0LUfLNrYrA3w6gvNV-ao-QCLcBGAsYHQ/s320/Konferensi%2BAptikom%2Bdi%2BBandung%2B1.jpg</url>
      </gambar>
    </data>
    </textarea>
    

在网站上,它是这样的:

enter image description here

  1. 然后我使用以下代码解析 xml:

    from urllib.request import urlopen
    from xml.etree.ElementTree import parse
    from lxml import etree
    var_url = urlopen('https://imanparyudi.000webhostapp.com/gambar.html')
    xmldoc = parse(var_url)
    elem = etree.XML(xmldoc, parser=parser)
    

但我收到此错误:

    File "<string>", line unknown ParseError: XML or text declaration not at start of entity: line 2, column 0

我假设这个错误是由xml代码开头的空格引起的。因此,我尝试使用以下方法删除此空格: etree.XMLParser(remove_blank_text=True) 和第二个: etree.XMLParser(recover=True) 像这样:

    from urllib.request import urlopen
    from xml.etree.ElementTree import parse
    from lxml import etree
    parser = etree.XMLParser(remove_blank_text=True)
    var_url = urlopen('https://imanparyudi.000webhostapp.com/gambar.html')
    xmldoc = parse(var_url)
    elem = etree.XML(xmldoc, parser=parser)

    from urllib.request import urlopen
    from xml.etree.ElementTree import parse
    from lxml import etree
    parser = etree.XMLParser(recover=True)
    var_url = urlopen('https://imanparyudi.000webhostapp.com/gambar.html')
    xmldoc = parse(var_url)
    elem = etree.XML(xmldoc, parser=parser)

但是,两种方式都会出现相同的错误:

    File "<string>", line unknown ParseError: XML or text declaration not at start of entity: line 2, column 0
  1. 所以,我的问题是:

一个。这个问题是不是使用<'textarea'><'\textarea'>标签造成的?

B.如果是这样,我如何在网站上发布我的 xml 代码?

c.如果不是,如何解决这个 ParseError?

3 个答案:

答案 0 :(得分:1)

您取回 HTML 文档。
在 HTML 中,<textarea> 包含 XML 文档。
下面的代码指向 XML 文档并解析它。

import requests
import xml.etree.ElementTree as ET

r = requests.get('https://imanparyudi.000webhostapp.com/gambar.html')
if r.status_code == 200:
    start = r.text.find('<?xml')
    end = r.text.find('</textarea>')
    root = ET.fromstring(r.text[start:end])
    print(root)

答案 1 :(得分:0)

这可能是因为您在文档的开头遗漏了这一点

答案 2 :(得分:0)

原因

一个 XML 声明,

<?xml version="1.0"?>

只能出现一次,并且只能出现在 XML 文档的最顶部。

显然,有

<textarea rows="1000" cols="200" style="border:none;">

在它之前违反了该要求。

补救措施

  • 由于您仅指定 XML 为 1.0 版,而且这是默认值,因此只需删除 XML 声明,或
  • 删除 XML 声明之前的所有内容。

另见

相关问题