1

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

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

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

</person>

我要做的只是一个 php 脚本获取速率标记的值并将其加 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;
?>

实施将非常有帮助:)

4

2 回答 2

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 不是一个有效的方法,在这里是不必要的。是此代码的一个示例。

或者,您可以使用 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());
?>

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

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

$f = fopen("rate.xml", "w");
fwrite($f, $sxml->asXML());
fclose($f);
于 2012-10-16T11:59:04.377 回答
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>
于 2012-10-16T12:42:35.507 回答