从php更新带有多个子节点的XML的节点值


update node values of a XML with multiple child nodes from php

以下是我的XML文件,我想更新latestBid内部的美元和美分值。我首先尝试了美元价值,但它不起作用。我甚至试图更新描述('//item[id="4"]/description'),即使没有工作。请告诉我我做错了什么。XML文件

<?xml version="1.0"?>
<items>
  <item>
    <itemNumber>4</itemNumber>
    <latestBid>
      <latestCustomerId>1</latestCustomerId>
      <bidPrice>
        <doller>2342</doller>
        <cent>23</cent>
      </bidPrice>
    </latestBid>
  </item>
  <item>
    <itemNumber>5</itemNumber>
    <latestBid>
      <latestCustomerId>1</latestCustomerId>
      <bidPrice>
        <doller>35345</doller>
        <cent>78</cent>
      </bidPrice>
    </latestBid>
  </item>
</items>

PHP file

<?php
$url = '../../data/auction2.xml';
$itemNumber ="4";
$bidDoller = 45;
$bidCent=55;
$doc = new DomDocument();
$xml=simplexml_load_file($url);
//echo "came 1";working
foreach ($xml->xpath('//item[@itemNumber="4"]/latestBid/bidPrice/doller') as $desc) {
  echo "came 2";//nt working
  $dom=dom_import_simplexml($desc);
  $dom->nodeValue = $bidDoller; 
  }
file_put_contents($url, $xml->asXML()); 
?>

编辑。

感谢大家的支持,我终于做到了。因为这对我来说并不容易,所以我把答案贴出来帮助像我这样的人:)。我没有更改xml。

php文件

$url = '../../data/auction2.xml';
$itemNumber ="4";
$bidDoller = 85;
$bidCent=95;
$xml=simplexml_load_file($url);
$resultDoller= $xml->xpath('//item[itemNumber="'.$itemNumber.'"]/latestBid/bidPrice/doller');
$resultCent= $xml->xpath('//item[itemNumber="'.$itemNumber.'"]/latestBid/bidPrice/cent');
$resultDoller[0][0]=$bidDoller;
$resultCent[0][0]=$bidCent;
print $xml->asXML();
file_put_contents($url, $xml->asXML()); 

以下方法对我有效,//XML

<?xml version="1.0"?>
<items>
  <item id="4">
    <itemNumber>4</itemNumber>
    <latestBid>
      <latestCustomerId>1</latestCustomerId>
      <bidPrice>
        <doller>2342</doller>
        <cent>23</cent>
      </bidPrice>
    </latestBid>
  </item>
  <item>
    <itemNumber>5</itemNumber>
    <latestBid>
      <latestCustomerId>1</latestCustomerId>
      <bidPrice>
        <doller>35345</doller>
        <cent>78</cent>
      </bidPrice>
    </latestBid>
  </item>
</items>
PHP

//

<?php
$url = '../../data/auction2.xml';
$itemNumber ="4";
$bidDoller = 45;
$bidCent=55;
$doc = new DomDocument();
$xml=simplexml_load_file($url);
$result = $xml->xpath('//item[@id="4"]/latestBid/bidPrice/doller');
echo "<pre>";
print_r($result);
//echo "came 1";working
foreach ($xml->xpath('//item[@id="4"]/latestBid') as $desc) {
  echo "came 2";//nt working
  $dom=dom_import_simplexml($desc);
  $dom->nodeValue = $bidDoller; 
  }
//file_put_contents($url, $xml->asXML()); 
?>