Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Django/Python中的XML标记之间从XML文档中提取数据?_Python_Xml_Django_Django Views_Web Scraping - Fatal编程技术网

如何从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,请随时提问。