2011-07-27 9 views
0

から要素を望んでいたではない:PHPの負荷が、私はこの機能を使用して、私のXMLファイルからいくつかのデータをロードするためにwan't XMLファイル

public function getElements() 
{ 
    $elements = array(); 

    $element = $this->documentElement->getElementsByTagName('elements')->item(0); 

    // checks if it has any immunities 
    if(isset($element)) 
    { 
     // read all immunities 
     foreach($element->getElementsByTagName('element') as $v) 
     { 
      $v = $v->attributes->item(0); 

      // checks if immunity is set 
      if($v->nodeValue > 0) 
      { 
       $elements[$v->nodeName] = $v->nodeValue; 
      } 
     } 
    } 

    return $elements; 
} 

私は私のXMLファイルからその要素をロードするためにwan't:

<elements> 
    <element physicalPercent="10"/> 
    <element icePercent="10"/> 
    <element holyPercent="-10"/> 
</elements> 

要素ノード名とノード値だけを読み込むことはできません。

は、私のクエリループでこのコードを手に入れた:

  $elements = $monster->getElements(); 
      $elN = 0; 
      $elC = count($elements); 
      if(!empty($elements)) { 
       foreach($elements as $element => $value) { 
        $elN++; 
        $elements_string .= $element . ":".$value; 
        if($elC != $elN) 
         $elements_string .= ", "; 
       } 
      } 

そして最後に - $変数をelements_stringの出力が間違っている:

earthPercent:50, holyPercent:50, firePercent:15, energyPercent:5, physicalPercent:25, icePercent:30, deathPercent:30firePercent:20, earthPercent:75firePercent:20, earthPercent:75firePercent:20, earthPercent:75physicalPercent:70, holyPercent:20, deathPerce 

それは、むしろ返す必要があります:

physicalPercent:10, icePercent:10, holyPercent:-10 

もう一度お手伝いできますか?

ありがとうございます。

+0

を実際に重要であるあなたの質問にコードを追加してください:どのように/どこでその関数を呼び出すのですか?その関数に渡す実際のデータは何ですか?コードはそこにコード化したものだけを処理しますが、その関数に渡すデータ全体を表示しているわけではありません。あなたの質問に投稿されたコードを最小限に抑えてください。 – hakre

答えて

1

XML-パーサーは、どの要素を読み込みたいのか、どの要素を読み込まないのか魔法のようには知りません。自分でこれをフィルタリングする必要があります。次に、投稿したgetElementsファンクションまたは希望の要素をフィルタリングする場所を決定する必要があります。

getElementsは何らかの一般的な機能でなければならないすべての要素を返す必要がありますか?次に、if($v->nodeValue > 0)のようなものに変更する必要があります。if(!empty($v->nodeValue))そうでなければ、これは負であり、古い式が偽になるので、 "holyPercent"の値は得られません。あなたの「クエリのループ」で次に

、ちょうどご希望の要素を選択:

foreach($elements as $element => $value) { 
    if(in_array($element, array("physicalPercent", "icePercent", "holyPercent"))) { 
     $elN++; 
     $elements_string .= $element . ":".$value; 
     if($elC != $elN) 
      $elements_string .= ", "; 
    } 
} 
0

ジャスト:

$xml = new SimpleXMLElement($xmlfile); 

そして:

for($i=1;$i<Count($xml->elements);$i++) 
    echo $xml->elements[$i][0]; 
それは[0]、通常、私が使用して動作するかどうか

がしようとしなかった:まあ

echo $xml->elements[$i]['attributename']; 
+0

私はそれを知っています。問題は、$ elements_string変数に挿入することができない属性は、各データ用でなければならないということです。今度は、すべてのループのデータをカウントします。 – Lucas

関連する問題