2

这是我的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中增加或减少我,然后将其保存回来(我的页面上有用于season_number和episode_number的+/-按钮,我正在使用`$_post对于那个按钮)。

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

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

它总是说我已经达到了最大情节

4

2 回答 2

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)
于 2013-02-04T11:35:09.240 回答
2

如果$numberDOMElement对应于episode_number,请执行以下操作以增加:

$number->nodeValue++;

顺便说一句,$number = $test->childNodes->item(2);我建议 XPath 始终处理正确的元素,而不是:

$number = $xpath->query('episode_number', $test)->item(0);
于 2013-02-04T11:50:19.523 回答