使用python连接从web提取的XML字符串
我正在尝试连接两个从web提取的xml文件。我只需要在第一个XML文件的末尾添加第二个XML文件。为此,我尝试从web中提取XML,将它们转换为字符串,加入它们,然后从连接的字符串创建一个新的树使用python连接从web提取的XML字符串,python,xml,lxml,elementtree,Python,Xml,Lxml,Elementtree,我正在尝试连接两个从web提取的xml文件。我只需要在第一个XML文件的末尾添加第二个XML文件。为此,我尝试从web中提取XML,将它们转换为字符串,加入它们,然后从连接的字符串创建一个新的树 urls = 'http://www.w3schools.com/xml/guestbook.asp', 'http://www.w3schools.com/xml/guestbook.asp' for url in urls: url = url[0] XML = requests
urls = 'http://www.w3schools.com/xml/guestbook.asp', 'http://www.w3schools.com/xml/guestbook.asp'
for url in urls:
url = url[0]
XML = requests.get(url)
XML_str = XML.content + XML_str
XML_data = ET.fromstring(XML_str)
tree = ET.ElementTree(XML_data)
但是,当我这样做时,我会得到以下错误
错误:lxml.etree.xmlsyntaxer错误:仅允许在文档开头第1行第326列声明XML
XML字符串在我看来很好,我认为错误与每个提要中有两行声明有关(例如)
有谁知道一种更好的方法来连接两个从web上提取的XML文件而不写入磁盘……?每棵树都有一个根节点。因此,每个
XML\u str
s必须附加到某个公共根节点。以下是如何做到这一点:
import lxml.etree as ET
import requests
urls = 'http://www.w3schools.com/xml/guestbook.asp', 'http://www.w3schools.com/xml/guestbook.asp'
root = ET.Element('root')
for url in urls:
XML = requests.get(url)
root.append(ET.fromstring(XML.content))
tree = root.getroottree()
print(ET.tostring(tree, pretty_print=True))
您不能仅仅连接两个xml文件,因为将有两个xml声明和两个根元素 相反,您应该使用。下面是一个示例,其中来自第二个留言簿xml的来宾被附加到第一个xml的留言簿:
import requests
from xml.etree import ElementTree as ET
urls = 'http://www.w3schools.com/xml/guestbook.asp', 'http://www.w3schools.com/xml/guestbook.asp'
xml_list = [requests.get(url).content for url in urls]
root1 = ET.fromstring(xml_list[0])
root2 = ET.fromstring(xml_list[1])
for element in root2.findall('guest'):
root1.append(element)
print ET.tostring(root1)
打印(为了便于阅读,我将其缩进):
泰耶
贝克
简
参考文献
托莱夫
拉斯穆森
安东
切克
不新鲜的
参考文献
哈里
普拉温
黑格
参考文献
泰耶
贝克
简
参考文献
托莱夫
拉斯穆森
安东
切克
不新鲜的
参考文献
哈里
普拉温
黑格
参考文献
<guestbook>
<guest>
<fname>Terje</fname>
<lname>Beck</lname>
</guest>
<guest>
<fname>Jan</fname>
<lname>Refsnes</lname>
</guest>
<guest>
<fname>Torleif</fname>
<lname>Rasmussen</lname>
</guest>
<guest>
<fname>anton</fname>
<lname>chek</lname>
</guest>
<guest>
<fname>stale</fname>
<lname>refsnes</lname>
</guest>
<guest>
<fname>hari</fname>
<lname>prawin</lname>
</guest>
<guest>
<fname>Hege</fname>
<lname>Refsnes</lname>
</guest>
<guest>
<fname>Terje</fname>
<lname>Beck</lname>
</guest>
<guest>
<fname>Jan</fname>
<lname>Refsnes</lname>
</guest>
<guest>
<fname>Torleif</fname>
<lname>Rasmussen</lname>
</guest>
<guest>
<fname>anton</fname>
<lname>chek</lname>
</guest>
<guest>
<fname>stale</fname>
<lname>refsnes</lname>
</guest>
<guest>
<fname>hari</fname>
<lname>prawin</lname>
</guest>
<guest>
<fname>Hege</fname>
<lname>Refsnes</lname>
</guest>
</guestbook>