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());
?>

これがその例です。出力は同じです。

これら 2 つの例に違いはありません。結果はまったく同じで、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 に答える