来自xml的PHP递增/递减值

时间:2013-02-04 11:32:51

标签: php xml increment decrement

这是我的xml。

    <episodes>
        <episode>
           <series_name>Test</series_name>
            <season_number>1</season_number>
            <episode_number>10</episode_number>
            <episodes_in_season>12</episodes_in_season>
            <notes>Testing</notes>
         </episode>
    </episodes>

我想要做的是获取季节/剧集编号的数量,然后从该xml增加或减少i,然后将其保存回来(我的页面上有+/-按钮,用于season_number和episode_number,我正在使用`$ _post for the button)。

到目前为止,这是我的代码。

$xmlDoc = new DOMDocument();
$xmlDoc->load($user);
$xpath = new DOMXpath($xmlDoc);
$test = $xmlDoc->getElementsByTagName('episode')->item(0);

// example for episode number increment / decrement (what i think)

   $number = $test->childNodes->item(2); 

    $increment = $number + 1; 
    $decrement = $number - 1; // example 

我被困在这里并且我没有完成它,因为我无法看到$number中发生了什么,因为我收到此错误类DOMElement的对象无法转换为int。< /强>

我也用(int)$number = $test->childNodes->item(2);尝试过,但没有运气。而且我也是php的初学者,所以我可能会把这件事弄错了。

修改

  $eNumber = $xpath->query('episode_number', 'episode')->item(0);
      $esNumber = $xpath->query('episodes_in_season', 'episode')->item(0);
     if ($eNumber == $esNumber)
     {
        echo "You have reached the max episode in season";

     }
     else
     {

     $eNumber->nodeValue++;
     }

它总是说我已经达到最大插曲

2 个答案:

答案 0 :(得分:2)

您使用的DOMNodelist::item()方法不返回值(既不是字符串也不是整数),它返回一个节点:

  

DOMNode DOMNodelist::item ( int $index )

因此(假设您的Xpath查询正确),您需要访问其nodeValue属性以读取该数字。然后,如果您转换为整数,请确保在之前执行此操作,并将结果分配给变量:

$number = (int)$test->childNodes->item(2)->nodeValue; 

...虽然通常没有必要,因为PHP会在你做数学后立即为你做这件事:

$foo = '33';
var_dump($foo); // string(2) "33"
$foo++;
var_dump($foo); // int(34)

答案 1 :(得分:2)

如果$number是与episode_number对应的DOMElement,请执行以下操作以增加:

$number->nodeValue++;

顺便说一句,我建议使用XPath来代替$number = $test->childNodes->item(2);来代替正确的元素:

$number = $xpath->query('episode_number', $test)->item(0);