1

phpスクリプトで助けが必要なタイトルと同じように、指定された指定された値と等しい場合、「name」ノード値を取得します。「rate」ノードの値を変更すると、同じ「person」親ノードがあります。次のようなxmlファイル'rate.xml'

<?xml version="1.0"?>
<user>
<person>
<name>jessy</name> 
<rate>2</rate>
</person>
<person>
<name>mice</name>
<rate>5</rate>
</person>
</user>

スクリプトはこれに似ています

<?php
$name = $_POST['name'];
$like = $_POST['like'];

$doc = new DOMDocument();

libxml_use_internal_errors(true);

$doc->loadXML(file_get_contents ('rate.xml'));

$xpath = new DOMXPath($doc);

$nlist = $xpath->query("//user/person/rate");

$node = $nlist->item(0);

$newval = trim($node->nodeValue)-1;

$node->nodeValue = $newval;

file_put_contents ('rate.xml', $doc->saveXML());


?>

私の欠けている部分は、「if」条件を入力して、名前が「POST」に渡した名前と等しいかどうかをチェックする方法と、この「name」ノードの後に​​続く「rate」ノードへの変更を「POST['name」で制限する方法です。 ']" 価値。実装はとても助けになりますよろしくお願いします:)

4

1 に答える 1

1

あなたはこれを行うことができます

$name = "jessy";
$xml = '<?xml version="1.0"?>
<user>
<person>
<name>jessy</name> 
<rate>2</rate>
</person>
<person>
<name>mice</name>
<rate>5</rate>
</person>
</user>';

$xml = new SimpleXMLElement($xml);
for($i = 0; $i < count($xml->person); $i ++) {
    if ($xml->person[$i]->name == $name) {
        $xml->person[$i]->rate = $xml->person[$i]->rate - 1;
    }
}
echo $xml->asXML();

出力

<?xml version="1.0"?>
<user>
    <person>
        <name>jessy</name>
        <rate>1</rate>    <----- Modified rate for jessy
    </person>
    <person>
        <name>mice</name>
        <rate>5</rate>
    </person>
</user>
于 2012-10-17T12:45:56.487 に答える