Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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-ish的查询大型XML文件的方法,该文件';它使用了一些非常慢的XPath_Xml_Django_Xpath_Elementtree - Fatal编程技术网

更快/更像Django-ish的查询大型XML文件的方法,该文件';它使用了一些非常慢的XPath

更快/更像Django-ish的查询大型XML文件的方法,该文件';它使用了一些非常慢的XPath,xml,django,xpath,elementtree,Xml,Django,Xpath,Elementtree,django中my views.py文件中的函数之一具有以下代码: from lxml import etree f = etree.parse("path/to/file/k2.xml") for item in charList: first += f.xpath(u"//character[item='"+item+"']/path/to/entry[@type='on']/text()") second += f.xpath(u"//character[item='"+i

django中my views.py文件中的函数之一具有以下代码:

from lxml import etree
f = etree.parse("path/to/file/k2.xml")
for item in charList:
    first += f.xpath(u"//character[item='"+item+"']/path/to/entry[@type='on']/text()")
    second += f.xpath(u"//character[item='"+item+"']/path/to/entry[@type='off']/text()")
这将加载一个14mb的XML文件,扫描直到找到正确的项,并使用XPath向两个变量添加两个值

这是非常缓慢的-5到6秒,这是不可接受的高流量网站

Django教导您不要为每个查询调用数据库,而是在settings.py文件中建立一个永久连接——但如果您使用的是SQL,而不是XML


是否有某种方法可以加快这一速度,可能是始终将xml文件放在内存中?

在14MB xml文件中执行XPath会很慢,特别是当您使用
/
作为查询的根时。这将迫使处理器查找每个节点,并对照它检查Xpath的有效性

如果可以,请将文件分解为更小的文档—记住XML是一种基于文档的格式,您的所有内容都需要在一个文件中吗


如果您必须使用如此大的文件,那么请尝试获取尽可能完整的XPath。如果您知道内容仅在根ndoe的一个分支中,请指定该分支。即使是Xpath根目录上的一个小更改也会对速度产生很大的影响。

我已经将XML文件迁移到了一个MySQL数据库中,速度要快得多。但这个问题仍然存在:/