2

我正在尝试根据 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
}
4

2 回答 2

0

使用 xpath 检索 id=your value 的节点(它基于值)。

$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
}
于 2013-04-22T13:20:42.693 回答
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;
于 2013-04-22T12:58:49.490 回答