【发布时间】:2020-05-22 22:43:07
【问题描述】:
我需要解析多个 XML 文件并将解析后的数据放入数据库。
xml的结构是这样的
<npc ATT1="" ATT2="" ATT3="">
<race>DATA</race>
<sex>DATA</sex>
<parameters>
<param ATT1="" ATT2="" ATT3=""/>
<param ATT1="" ATT2="" ATT3=""/>
<skill ATT1="" ATT2="" ATT3=""/>
<skill ATT1="" ATT2="" ATT3=""/>
</parameters>
<equipment ATT1="" ATT2="" ATT3=""/>
<acquire ATT1="" ATT2="" ATT3=""/>
<stats ATT1="" ATT2="" ATT3="">
<vitals ATT1="" ATT2="" ATT3=""/>
<attack ATT1="" ATT2="" ATT3=""/>
<defence ATT1="" ATT2="" ATT3="">
<attribute>
<defence ATT1="" ATT2="" ATT3=""/>
</attribute>
</defence>
</stats>
<skilllist>
<skill ATT1="" ATT2="" ATT3=""/>
<skill ATT1="" ATT2="" ATT3=""/>
<skill ATT1="" ATT2="" ATT3=""/>
<skill ATT1="" ATT2="" ATT3=""/>
</skilllist>
<excrteffect>DATA<excrteffect>
</npc>
我当前的代码如下所示:
$allFiles = scandir($_SERVER['DOCUMENT_ROOT'] . "mydir");
$files = array_diff($allFiles, array('.', '..'));
$doc = new DOMDocument();
foreach($files as $filename) {
$xml_file = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "mydir" . $filename, FILE_TEXT);
$doc->loadXML($xml_file);
$items = $doc->getElementsByTagName('npc');
for ($i = 0; $i < $items->length; $i++) {
$xml_file = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "mydir" . $filename, FILE_TEXT);
$doc->loadXML($xml_file);
$Id = $doc->getElementsByTagName("npc")->item($i)->getAttribute("id");
$Name = $doc->getElementsByTagName("npc")->item($i)->getAttribute("name");
$Lvl = $doc->getElementsByTagName("npc")->item($i)->getAttribute("level");
$Type = $doc->getElementsByTagName("npc")->item($i)->getAttribute("type");
$Title = $doc->getElementsByTagName("npc")->item($i)->getAttribute("title");
$Sex = $doc->getElementsByTagName("sex")->item($i)->nodeValue;
$Race = $doc->getElementsByTagName("race")->item($i)->nodeValue;
}
}
它适用于我已经编码的数据,现在我需要获取其余部分。如何从 xml 的其余部分获取属性?例如如何获取属性
npc > stats > defence > attribute > defence
【问题讨论】:
-
虽然有一定的学习曲线,但我建议学习一些 XPath,因为这会让你的代码更加简洁。
-
感谢您的建议,有空就去做。