2011-07-27 60 views
0

我wan't使用此功能從我的XML文件中加載一些數據:PHP負荷不希望從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; 
} 

我wan't加載,從我的XML文件中的元素:

<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-函數中或在您的「查詢循環」中篩選期望的元素,就像您稱之爲的那樣。

getElementsgetElements必須返回所有元素?那麼你應該將if($v->nodeValue > 0)更改爲if(!empty($v->nodeValue))之類的東西,否則你不會得到「holyPercent」值,因爲這是負值(舊的表達式會變成false)。

在「查詢循環」

然後,只需選擇您所需的元素:

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