如何根据ID选择XML中的属性?

时间:2013-04-22 12:56:57

标签: php xml xml-attribute

我正在尝试根据ID从XML文件中获取一组属性。我环顾四周,找不到有效的解决方案。

这是我的XML:

<data>
<vico>2</vico>
<vis>
<vi>
    <id>1</id>
    <name>Vill1</name>
    <att>2</att>
    <hp>100</hp>
    <xp>10</xp>
</vi>
<vi>
    <id>2</id>
    <name>Vill2</name>
    <att>3</att>
    <hp>120</hp>
    <xp>12</xp>
</vi>
</vis>
</data>

我要做的是创建一个获取vico值并执行mt_rand(0,vico)的脚本(已经创建了这部分代码),并根据出现的数量,拉出该节点。

例如,如果数字是2,我希望它拉出xml文件中id为2的所有属性。我在想我必须使ID成为其他属性的父项,但是我我不确定。对于我的生活,我无法弄清楚这一点。在我再投资之前,我也想确保这是可能的。

我确实意识到这可以通过mySQL很容易地完成,但是我选择不这样做以便于移植,因为我正在使用拇指驱动器。任何帮助将不胜感激。

基于ID的拉动工作代码:

         $xml = simplexml_load_file("vi.xml")
       or die("Error: Cannot create object");


     $vc = $xml->vico;
     $select = mt_rand()&$vc;
     if ($select == 0) {
     $select = $select + 1;
     }

     $result = $xml->xpath("/data/vis/vi/id[.='".$select."']/parent::*");
if ($result) {
$node = $result[0];
$name = $node->name;
$att = $node->att;
$hp = $node->hp;
$xp = $node->xp  ;
} else {
// nothing found for this id
}

2 个答案:

答案 0 :(得分:0)

如果您使用的是SimpleXML:

$name = $xml->vis->vi[$vico]->name;
$att  = $xml->vis->vi[$vico]->att;
$hp   = $xml->vis->vi[$vico]->hp;
$xp   = $xml->vis->vi[$vico]->xp;

答案 1 :(得分:0)

使用xpath检索节点,其中is =您的值(它基于值)。

$result = $xml->xpath("/data/vis/vi/id[.='".$select."']/parent::*");
if ($result) {
   $node = $result[0];
   $name = $node->name;
   $att = $node->att;
   $hp = $node->hp;
   $xp = $node->xp  ;
} else {
   // nothing found for this id
}