如何从Django/Python中的XML标记之间从XML文档中提取数据?
我在如何从Django/Python中的XML标记之间从XML文档中提取数据?,python,xml,django,django-views,web-scraping,Python,Xml,Django,Django Views,Web Scraping,我在views.py文件中加载了一个外部xml文件 def test(request): url = urllib2.urlopen("http://someurl.com?xml") dom = minidom.parse(url) groups = dom.getElementsByTagName("group") deal_holder = [] # Iterate over each DOM group element: fo
views.py
文件中加载了一个外部xml文件
def test(request):
url = urllib2.urlopen("http://someurl.com?xml")
dom = minidom.parse(url)
groups = dom.getElementsByTagName("group")
deal_holder = []
# Iterate over each DOM group element:
for group in groups:
# Iterate over each child node
for groupChild in group.childNodes:
deal_holder.append(groupChild)
return render_to_response('folder/test.html', {'deal_holder':deal_holder})
这是加载的XML文件的外观:
<page>
<site>
<siteid>25550</siteid>
<sitename>
<![CDATA[ Some Text Here ]]>
</sitename>
<sitelink>
http://somelinkehere.com
</sitelink>
<timezone>
<![CDATA[ Pacific Time ]]>
</timezone>
</site>
<groups>
<enablefeaturedgroup>OFF</enablefeaturedgroup>
<group>
<groupid>467246</groupid>
<groupname>
<![CDATA[ Today's Deal ]]>
</groupname>
<groupdescription>
<![CDATA[ ]]>
</groupdescription>
</group>
<group>
<groupid>467247</groupid>
<groupname>
<![CDATA[ Past Deals ]]>
</groupname>
<groupdescription>
<![CDATA[ ]]>
</groupdescription>
</group>
</groups>
</page>
25550
http://somelinkehere.com
关
467246
有了它,你可以做这样的事情:
import lxml.etree
tree = lxml.etree.parse("http://someurl.com")
sites = tree.xpath("//site")
for site in sites:
siteid = site.find("siteid").text
print siteid
有了它,你可以做这样的事情:
import lxml.etree
tree = lxml.etree.parse("http://someurl.com")
sites = tree.xpath("//site")
for site in sites:
siteid = site.find("siteid").text
print siteid
使用minidom与javascript非常相似
from xml.dom import minidom
from StringIO import StringIO
a = """<page>
<site>
<siteid>25550</siteid>
<sitename>
<![CDATA[ Some Text Here ]]>
</sitename>
<sitelink>
http://somelinkehere.com
</sitelink>
<timezone>
<![CDATA[ Pacific Time ]]>
</timezone>
</site>
<groups>
<enablefeaturedgroup>OFF</enablefeaturedgroup>
<group>
<groupid>467246</groupid>
<groupname>
<![CDATA[ Today's Deal ]]>
</groupname>
<groupdescription>
<![CDATA[ ]]>
</groupdescription>
</group>
<group>
<groupid>467247</groupid>
<groupname>
<![CDATA[ Past Deals ]]>
</groupname>
<groupdescription>
<![CDATA[ ]]>
</groupdescription>
</group>
</groups>
</page>
"""
tree = minidom.parse(StringIO(a))
groups = tree.getElementsByTagName("group")
您可以将它们的值保存在字典列表中。使用minidom与javascript非常相似
from xml.dom import minidom
from StringIO import StringIO
a = """<page>
<site>
<siteid>25550</siteid>
<sitename>
<![CDATA[ Some Text Here ]]>
</sitename>
<sitelink>
http://somelinkehere.com
</sitelink>
<timezone>
<![CDATA[ Pacific Time ]]>
</timezone>
</site>
<groups>
<enablefeaturedgroup>OFF</enablefeaturedgroup>
<group>
<groupid>467246</groupid>
<groupname>
<![CDATA[ Today's Deal ]]>
</groupname>
<groupdescription>
<![CDATA[ ]]>
</groupdescription>
</group>
<group>
<groupid>467247</groupid>
<groupname>
<![CDATA[ Past Deals ]]>
</groupname>
<groupdescription>
<![CDATA[ ]]>
</groupdescription>
</group>
</groups>
</page>
"""
tree = minidom.parse(StringIO(a))
groups = tree.getElementsByTagName("group")
您可以将它们的值保存在一个字典列表中。因为我使用的是django,所以我这样做了data=dom.getElementsByTagName(“组”)
,然后将data
变量传递给模板,在模板中我执行{data}
,输出1-[,]
。我如何才能从诸如groupid
或groupname
之类的数据中检索任何数据,谢谢!我更新了上面的代码,以反映我根据您的建议所做的一些更改。但问题是,在我的模板
文件中,我添加了{{deal\u holder}}
,它输出了[,,,,,等等]
,所以我仍然无法获取信息。我对python/django还很陌生,所以我可能遗漏了一些明显的东西。谢谢你的帮助。请参阅我的编辑。之所以会发生这种情况,是因为您的deal_holder变量包含一个列表,而该列表是打印列表的表示形式。我现在得到的错误是异常值:文本实例没有属性“tagName”
,因为我使用的是django,所以我这样做了data=dom.getElementsByTagName(“组”)
然后将数据
变量传递给模板,在模板中我执行{{data}
操作,该操作输出1-[,]
。我如何才能从诸如groupid
或groupname
之类的数据中检索任何数据,谢谢!我更新了上面的代码,以反映我根据您的建议所做的一些更改。但问题是,在我的模板
文件中,我添加了{{deal\u holder}}
,它输出了[,,,,,等等]
,所以我仍然无法获取信息。我对python/django还很陌生,所以我可能遗漏了一些明显的东西。谢谢你的帮助。请参阅我的编辑。这是因为您的deal_holder变量包含一个列表,而该列表是打印的列表的表示形式。我现在得到的错误是异常值:文本实例没有属性“tagName”
是否还有我的示例没有涵盖的其他操作?我无法获取lxml.etree进行导入,并且我正在不确定是否可以在我的服务器上安装它。另外,您介意从示例中删除实际的URL吗?我一定是搞错了。Thnks!啊,好的,删除了。如果您成功地在服务器上安装了lxml,请随时提出任何问题。是否还有我的示例没有涉及的其他问题?我无法导入lxml.etree,我不确定是否可以在我的服务器上安装它。另外,您介意从示例中删除实际的URL吗?我一定是搞错了。Thnks!啊,好的,删除了。如果您成功地在服务器上安装了lxml,请随时提问。