使用replaceChild php DOM替换TextNode

时间:2014-05-10 00:08:36

标签: php xml

我有这个XML文件,我需要使用php DOM替换qteStock的te值,但我仍然无法得到这个概念。任何人都可以帮助我吗?

<?xml version="1.0" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="Marque.xsl" ?>
<Marques xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="Marques.xsd">    
<Marque>
   <codeMarque>00003</codeMarque>
   <nomMarque>Diesel</nomMarque>
   <paysOrigine>USA</paysOrigine>
   <qteStock>50</qteStock>
   <qteLimite>5</qteLimite>
</Marque>
</Marques>

这是我试图操纵的PHP代码:

<?php
$marque=$_POST['nomMarque'];
$qte=$_POST['qte'];

$xmlstring = 'entities/Marques.xml';
$dom = new DOMDocument; 
$dom->load($xmlstring);

$xpath = new DOMXPath($dom);

$query = "//Marque[nomMarque='".$marque."']/qteStock";
$qteStock = $xpath->query($query);

$query = "//Marque[nomMarque='".$marque."']/qteLimite";
$qteLimite = $xpath->query($query);

$nouvelleQuantite = $qteStock->item(0)->nodeValue-$qte ;
$newQuantity = $dom->createTextNode($nouvelleQuantite);

$return = ($qteStock->replaceChild($newQuantity,$qteStock);
$dom->save('entities/Marques.xml');
?>

1 个答案:

答案 0 :(得分:0)

您可以设置元素节点的nodeValue属性 - 整数不需要在XML中转义。如果需要编写可能包含&amp;的文本,请将nodeValue设置为空字符串(删除所有子节点)并插入新的文本节点。

$changeValue = 5;

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);

$nodes = $xpath->evaluate('/Marques/Marque[1]/qteStock');
// node found?
if ($nodes->length > 0) {
  $stock = $nodes->item(0);
  $newValue = $stock->nodeValue - $changeValue;
  // just set the content (an int does not need any escaping)
  $stock->nodeValue = (int)$newValue;
}

echo $dom->saveXml();

演示:https://eval.in/149098