2013-04-22 2 views
2

ID를 기반으로 XML 파일에서 속성 그룹을 가져 오려고합니다. 나는 주변을 둘러 보았고 작동하는 해결책을 찾지 못했습니다.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> 

내가 무엇을 찾고 있어요 것은 비코의 값을 받아 수행하는 스크립트를 만들 수 있습니다에는, mt_rand (0, 비코가) (이미 코드의이 부분을 작성) 그 번호를 기반으로 노드를 가져옵니다.

예를 들어 숫자가 2 인 경우 XML 파일의 ID가 2 인 모든 속성을 가져오고 싶습니다. ID를 다른 속성의 부모로 설정해야한다고 생각하지만 나는 잘 모르겠다. 나에게있어서 나는이 사실을 알 수 없다. 나는 또한 내가 더 이상 투자하기 전에 이것이 가능한지 확인하고 싶다.

이 작업은 mySQL을 사용하여 매우 쉽게 수행 할 수 있지만 필자는 엄지 드라이브를 작동시킬 때 이식성을 위해 그렇게하지 않기로 결정했습니다. 어떤 도움이라도 대단히 감사하겠습니다. 당신이 SimpleXML을를 사용하는 경우

  $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 
} 

답변

0

ID가 = 당신의 값이 (그것이 기반으로 노드를 검색하는 XPath를 사용하여 값).

$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 
} 
+0

이것이 성공했습니다! 고마워요! – Rudenate3

0

:

ID를 기반으로 당기는 코드 작업

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

나는 루프가되어야한다고 생각한다. ID로 이어지는 4 가지 속성을 가져 오려고합니다. – Rudenate3

+0

@ Rudenate3 모든 ''열이 자동으로 증가하는 경우,이 방법으로 쉽게 수행 할 수 있습니다 (첫 번째 행은 '0'임을 기억하십시오). – h2ooooooo

+0

@ Rudenate3 Fixed it =). 비꼬가 '비코 -1'이되어야한다는 것을 기억하십시오. – silkfire