PHP负荷不希望从XML文件中的元素

问题描述:

我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

嘛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 .= ", "; 
    } 
} 

刚:

$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