是使用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;
?>
实施将非常有帮助:)
答案 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());
<?xml version="1.0"?>
<person>
<rate id="rate_this">2</rate>
</person>