获取xml节点值并添加1,然后将其再次保存到xml文件中

时间:2012-10-16 11:48:06

标签: php xml simplexml

是使用xml的新手。 我有一个简单的xml文件'rate.xml'包含:

<?xml version="1.0"?>
<person>

<rate id="rate_this">
1
</rate>

</person>

我想要做的就是一个php脚本获取rate标签的值并添加1 (即1 + 1 = 2)然后将速率标签值更新为新结果。 我尝试过这个脚本,但它不起作用:

<?php
$person = simplexml_load_file('rate.xml');
$rateNode = $person->getElementsByAttribute("id"); 
$xmlType = $rateNode->getElementsByTagName( "rate" );
$valueType = $xmlType->item(0)->nodeValue;  
$newValue = $valueType + 1 ;
$person->rate->nodevalue = $newValue;
?>

实施将非常有帮助:)

2 个答案:

答案 0 :(得分:1)

尝试这样做:

<?php
$domelement = dom_import_simplexml(simplexml_load_file('rate.xml'));
$person = $domelement->ownerDocument;
$xmlNodes = $person->getElementsByTagName( "rate" );
$valueType = $xmlNodes->item(0)->nodeValue;  
$newValue = $valueType + 1 ;
$xmlNodes->item(0)->nodeValue = $newValue;
echo($person->saveXML());
?>

我编辑了代码。请注意,getElementsByAttribute不是有效的方法,在此处不需要。 Here是此代码的一个示例。

或者,您可以使用Xpath按属性查找元素:

<?php
$sxml = simplexml_load_file('rate.xml');
$searcharray = $sxml->xpath("//*[@id='rate_this']");
$rate = $searcharray[0];
$value = $rate[0];
$newValue = intval($value) + 1 ;
$rate[0] = $newValue;
echo($sxml->asXML());
?>

Here就是一个例子。输出是一样的。

这两个例子没有区别。它们具有完全相同的结果,使用Xpath仍然不会自动将输出保存到文件中。如果要将输出保存到文件,请使用类似这样的内容而不是回显输出:

$f = fopen("rate.xml", "w");
fwrite($f, $sxml->asXML());
fclose($f);

答案 1 :(得分:1)

以下是为您完成工作的代码:

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadXML(file_get_contents ('file.xml')); // loads your xml
$xpath = new DOMXPath($doc);
$nlist = $xpath->query("//person/rate[@id='rate_this']");
$node = $nlist->item(0);
$newval = trim($node->nodeValue)+1;
$node->nodeValue = $newval;
file_put_contents ('out.xml', $doc->saveXML());

您的文件out.xml:

<?xml version="1.0"?>
<person>

<rate id="rate_this">2</rate>

</person>