如何从 url 解析 xml
How to parse xml from url
一般来说,我要做的是从url解析xml。这就是我所做的:
我在包含在 <'textarea'><'\textarea'> 标签中的 html 文件上写了 xml 代码:
<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>
在网站上,它是这样的:
然后我使用此代码解析 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
- 所以,我的问题是:
一个。这个问题是因为使用 <'textarea'><'\textarea'> 标签引起的吗?
b。如果是这样,我如何 post 我的 xml 代码在网站上?
c。如果不是,如何解决这个 ParseError?
这可能是因为您在文档开头漏掉了这个
原因
一个XML声明,
<?xml version="1.0"?>
可能只出现一次,并且只出现在 XML 文档的最顶部。
显然,
<textarea rows="1000" cols="200" style="border:none;">
提前违反了该要求。
补救措施
- 因为您只指定 XML 是 1.0 版,而且这是默认版本,只需删除 XML 声明,或者
- 删除 XML 声明之前的所有内容。
另见
- Error: The processing instruction target matching "[xX][mM][lL]" is not allowed
你回来HTML doc.
在 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)
一般来说,我要做的是从url解析xml。这就是我所做的:
我在包含在 <'textarea'><'\textarea'> 标签中的 html 文件上写了 xml 代码:
<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>
在网站上,它是这样的:
然后我使用此代码解析 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
- 所以,我的问题是:
一个。这个问题是因为使用 <'textarea'><'\textarea'> 标签引起的吗?
b。如果是这样,我如何 post 我的 xml 代码在网站上?
c。如果不是,如何解决这个 ParseError?
这可能是因为您在文档开头漏掉了这个
原因
一个XML声明,
<?xml version="1.0"?>
可能只出现一次,并且只出现在 XML 文档的最顶部。
显然,
<textarea rows="1000" cols="200" style="border:none;">
提前违反了该要求。
补救措施
- 因为您只指定 XML 是 1.0 版,而且这是默认版本,只需删除 XML 声明,或者
- 删除 XML 声明之前的所有内容。
另见
- Error: The processing instruction target matching "[xX][mM][lL]" is not allowed
你回来HTML doc.
在 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)