从xml文件中提取节点值并使用php更新该值

时间:2013-11-02 08:40:35

标签: php xml xpath shopping-cart

我有一个购物目录,每行末尾有一个按钮,用于将商品添加到购物车。我需要增加"保留数量(IqtyOH)"每次用户按下添加按钮一个。我需要根据它修改xml文档。

这是我的xml文件,只是为了得到和想法。

<items>
 <item>
  <IId>1</IId>
  <Iname>samsung</Iname>
  <Iprice>360</Iprice>
  <IqtyAv>9</IqtyAv>
  <IqtyOH>0</IqtyOH>
  <IqtySold>0</IqtySold>
  <ItemDesc>Galaxy</ItemDesc>
 </item>
 <item>
  <IId>2</IId>
  <Iname>sony</Iname>
  <Iprice>1200</Iprice>
  <IqtyAv>12</IqtyAv>    
  <IqtyOH>0</IqtyOH>
  <IqtySold>0</IqtySold>
  <ItemDesc>vaio</ItemDesc>
 </item>
</items>

我试图使用xpath从xml文件中检索信息,但没有用。有些东西是错误的。 这是我正在处理的代码。

$dom = new DOMDocument;
$dom->loadXML(file_get_contents($xmlFile));

$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//item[IID='$IId']/IqtyOH");
$node  = $nodes->item(0)->nodeValue;
$node++;
$node->nodeValue = $node;
$dom->saveXML();

1 个答案:

答案 0 :(得分:2)

我认为你的代码中有两个小错误。在XPATH中

$nodes = $xpath->query("//item[IID='$IId']/IqtyOH");

IID元素应为IId。所以你得到:

$nodes = $xpath->query("//item[IId='$IId']/IqtyOH");

其次$node是您找到的节点的值,而不是对它的引用,因此您无法在其上调用nodeValue。相反,你可以这样做:

$node = $nodes->item(0)->nodeValue;
$node++;
$nodes->item(0)->nodeValue =$node;