在读取节点值并在PHP中将其递增1之后,将节点值写回xml文件

时间:2014-05-19 10:35:49

标签: php xml

感谢您投入时间。我是一个像婴儿一样的新手。

我有一个Xml文件counter.xml,如。

<?xml version="1.0"?>
<countIt>
<number>50</number></countIt>

我可以通过SimpleXML读取此文件,如下所示:

$content=simplexml_load_file("counter.xml");
$addid=$content->countIt->number;

现在我想在增加1之类的一些操作之后读取这个值(数字---&gt; id,即55),我想在文件中保存这个节点的新值。 这意味着新值必须反映到xml文件中。

我遇到了这个问题。我尝试了DOM,但我只是帮助创建一个新的Xml文件。

请帮助

SOLUTION:

<?php
$domObj= new DOMDocument(); 
$domObj->load("counter.xml");
$value= $domObj->getElementsByTagName("countIt");
$newVal = 0 ;
foreach( $value as $val) 
{ 
 $ints = $val->getElementsByTagName("number"); 
 $intVal  = $ints->item(0)->nodeValue; 
 $newVal = $intVal+1;
 $domObj->getElementsByTagName("number")->item(0)->nodeValue = $newVal; 
 $domObj->save('counter.xml');
}  
?>

1 个答案:

答案 0 :(得分:0)

此示例使用xpath()函数选择要更改的节点:

$xml = simplexml_load_string($x); // assume XML in $x

// get the node
$target = $xml->xpath("/countIt/number");

// change it
$target[0][0] = (int)$target[0] + 1;

看到它有效:https://eval.in/153679

评论:

  • xpath会将数组返回$target,在此示例中,它有1个元素。
  • $target[0] = 50,为了安全起见,我在添加
  • 之前将其转换为(int)的整数
  • 要保存新XML,请在PHP.net上查看simplexml asXML()