我正在尝试编写一个 XMLReader/SimpleXML 混合函数来读取一个非常大(700MB)的 XML 文件。XML 采用以下格式:
<Items>
<Item>
<ItemKey>ABCDEF123</ItemKey>
<Name>
<English>An Item Name</English>
<German>An Item Name In German</German>
<French>An Item Name In French</French>
</Name>
<Description>
<English>An Item Description</English>
<German>An Item Description In German</German>
<French>An Item Description In French</French>
</Description>
</Item>
<Item>
<ItemKey>GHIJKL456</ItemKey>
<Name>
<English>Another Item Name</English>
<German>Another Item Name In German</German>
<French>Another Item Name In French</French>
</Name>
<Description>
<English>Another Item Description</English>
<German>Another Item Description In German</German>
<French>Another Item Description In French</French>
</Description>
</Item>
</Items>
到目前为止,我为此编写的代码:
$xml = new XMLReader();
if(!$xml->open('testitems.xml')){
die('Failed to open file!');
} else {
echo 'File opened';
}
$items = array();
while ($xml->read()){
if($xml->nodeType == XMLReader::ELEMENT){
if ($xml->name == 'Item'){
$item = array();
}
if ($xml->name == 'ItemKey'){
$xml->read();
$item['itemKey'] = $xml->value;
}
if ($xml->name == 'Name'){
$sxml = new SimpleXMLElement($xml->readOuterXml());
$englishName = $sxml->English;
$item['englishName'] = $englishName;
}
}
if($xml->nodeType == XMLReader::END_ELEMENT){
if ($xml->name == 'Item'){
$items[] = $item;
}
}
}
var_dump($items);
$xml->close();
但是,当 ItemKey 节点值被插入到数组中时,英文名称不是,我似乎无法正确访问该节点。我只会将 XMLReader 用于所有内容,但由于从我的谷歌搜索中重复出现英文节点(一个用于名称,另一个用于描述),到目前为止 SimpleXML 似乎是前进的方向,但还没有乐趣。
有什么建议么?有什么好的指南吗?与许多其他 PHP 功能相比,php.net 上的 XMLReader 文档严重缺乏,而且通常似乎很难找到清晰简洁的详细指南。