gpt4 book ai didi

php - 解析大型 XML 数据

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:46 25 4
gpt4 key购买 nike

我正在尝试解析 xml 文件以将数据存储到数据库中。我用 PHP 编写了一段代码(如下所示),我可以成功运行该代码。

但问题是,读取一个完整的文件(大约 30 MB)需要大约 8 分钟,而且我每小时必须解析大约 100 个文件。

所以,显然我当前的代码对我没有用。有人可以建议更好的解决方案吗?或者我应该切换到其他编码语言?

我从网上得到的是,我可以使用 Perl/Python 或称为 XSLT 的东西(坦率地说,我不太确定)。

$xml = new XMLReader();
$xml->open($file);
while ($xml->name === 'node1'){
$node = new SimpleXMLElement($xml->readOuterXML());
foreach($node->node2 as $node2){
//READ
}
$xml->next('node1');
}
$xml->close();

最佳答案

这是我用来解析 WURFL XML 数据库的脚本示例 found here .

我使用了 Python 的 ElementTree 模块并编写了一个 JavaScript 数组 - 尽管您可以轻松修改我的脚本以编写相同的 CSV(只需更改最后 3 行)。

import xml.etree.ElementTree as ET

tree = ET.parse('C:/Users/Me/Documents/wurfl.xml')

root = tree.getroot()

dicto = {} #to store the data

for device in root.iter("device"): #parse out the device objects

dicto[device.get("id")] = [0, 0, 0, 0] #set up a list to store the needed variables
for child in device: #iterate through each device

if child.get("id") == "product_info": #find the product_info id
for grand in child:

if grand.get("name") == "model_name": #and the model_name id
dicto[device.get("id")][0] = grand.get("value")
dicto[device.get("id")][3] +=1

elif child.get("id") == "display": #and the display id
for grand in child:

if grand.get("name") == "physical_screen_height":
dicto[device.get("id")][1] = grand.get("value")
dicto[device.get("id")][3] +=1

elif grand.get("name") == "physical_screen_width":
dicto[device.get("id")][2] = grand.get("value")
dicto[device.get("id")][3] +=1

if not dicto[device.get("id")][3] == 3: #make sure I had enough
#otherwise it's an incomplete dataset
del dicto[device.get("id")]

arrays = []

for key in dicto.keys(): #sort this all into another list

arrays.append(key)

arrays.sort() #and sort it alphabetically


with open('C:/Users/Me/Documents/wurfl1.js', 'w') as new: #now to write it out

for item in arrays:

new.write('{\n id:"'+item+'",\n Product_Info:"'+dicto[item][0]+'",\n Height:"'+dicto[item][1]+'",\n Width:"'+dicto[item][2]+'"\n},\n')

我在再次运行时计算了一下 - 大约用了 3 秒。

关于php - 解析大型 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com