我目前有一个1.6mb的XML文件,我在逻辑上缠绕我的头很麻烦。
格式是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<imgdir name="Map.img">
<imgdir name="3rd">
<imgdir name="300000000">
<string name="streetName" value="Ellin Forest"/>
<string name="mapName" value="Altaire Camp"/>
</imgdir>
</imgdir>
<imgdir name="4th">
<imgdir name="400000000">
<string name="streetName" value="asd"/>
<string name="mapName" value="yolo"/>
</imgdir>
</imgdir>
</imgdir>
我想在给定的imgdir中使用数字值访问mapName属性,因为300000000将返回&#34; Altaire Camp&#34;。
我已经尝试了相当多的代码来完成这项工作,而我甚至还没有接近。我甚至尝试了一些$ xml-&gt; xpath(&#39; // 300000000&#39;)的行,看看我是否可以通过它来访问名为mapName的字符串子项,但是没有成功。
我也试过这个:
if (file_exists('Map.xml')) {
$xml = simplexml_load_file('Map.xml');
foreach ($xml->imgdir as $imgdir)
{
echo $imgdir["name"] . "\n";
}
}
返回第3,第4等等。 我似乎无法获得字符串名称=&#34; mapName&#34;我做的任何事情。
编辑: 谢谢大家,我选择了这个解决方案:
function GetMapNameByID($id)
{
if (file_exists('Map.xml'))
{
$xml = simplexml_load_file('Map.xml');
$nodes = $xml->xpath("//imgdir[@name='$id']");
foreach($nodes as $node)
{
return $node->string[1]["value"];
}
}
}
它返回我想要的值。
答案 0 :(得分:0)
你的xpath错了。你需要使用
$xml->xpath("//imgdir[@name='300000000']/string[@name='mapName']/@value")[0];
这将首先选择名称属性等于 300000000 的 imgdir 元素,无论它有多深。然后它选择名称属性等于 mapName 的 string 子元素,最后选择 string 属性 string / em>的
最后,我们拉出返回的数组的第一个元素,这将是您想要的值。
答案 1 :(得分:0)
此代码适用于我:
$xmlstr = <<<XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<imgdir name="Map.img">
<imgdir name="3rd">
<imgdir name="300000000">
<string name="streetName" value="Ellin Forest"/>
<string name="mapName" value="Altaire Camp"/>
</imgdir>
</imgdir>
<imgdir name="4th">
<imgdir name="400000000">
<string name="streetName" value="asd"/>
<string name="mapName" value="yolo"/>
</imgdir>
</imgdir>
</imgdir>
XML;
$xml = new SimpleXMLElement($xmlstr);
foreach ($xml->imgdir as $imgdir) {
echo '<div>Directory Name = ' . $imgdir->imgdir['name'] . '</div>';
echo '<div>mapName = ' . $imgdir->imgdir->string[1]['value'] . '</div>';
}