2011-01-12 6 views
0

xml + phpを学ぶのを手伝ってくれてありがとう!xml子ノードのmax_value関数はありますか?

id子ノードのオートインクリメントを行いたいとします。私は私の説明を願って、私はIDを入力して一人の私createxml.phpで .. 私は、すべてのIDのmaxium値が何であるかを知ることができ、その後、ID = MAX_VALUE ++

になりたいです自己うまい。

<events> 
    <record> 
     <id>1</id> 
     <event>a</event> 
     <eventDate>a</eventDate> 
     <desc>a</desc> 
    </record> 
    <record> 
     <id>2</id> 
     <event>b</event> 
     <eventDate>b</eventDate> 
     <desc>b</desc> 
    </record> 
</events> 

、これは私がXMLに新しい子ノードを追加する方法..です

parser.php:

これはevents.xmlにファイルです。

<?php 

header("Content-type: text/html; charset=utf-8"); 

$record = array(
    'id' => $_POST['id'], 
    'event' => $_POST['event'], 
    'eventDate' => $_POST['eventDate'], 
    'desc' => $_POST['desc'], 
); 

$doc = new DOMDocument(); 
$doc->load('events.xml'); 
$doc->formatOutput = true; 
$r = $doc->getElementsByTagName("events")->item(0); 
$b = $doc->createElement("record"); 

$id = $doc->createElement("id"); 
$id->appendChild(
    $doc->createTextNode($record["id"]) 
); 
$b->appendChild($id); 

$event = $doc->createElement("event"); 
$event->appendChild(
    $doc->createTextNode($record["event"]) 
); 
$b->appendChild($event); 

$eventDate = $doc->createElement("eventDate"); 
$eventDate->appendChild(
    $doc->createTextNode($record["eventDate"]) 
); 
$b->appendChild($eventDate); 

$desc = $doc->createElement("desc"); 
$desc->appendChild(
    $doc->createTextNode($record["desc"]) 
); 

$b->appendChild($desc); 
$r->insertBefore($b,$r->firstChild); 

$doc->save("events.xml"); 

    header("Location: {$_SERVER['HTTP_REFERER']}");  
?> 

ありがとうございました!おそらく、このような

答えて

2

何か、:

$ids = array(); 
foreach($doc->getElementsByTagName('id') as $id) { 
    $ids[] = (int) $id->nodeValue; 
} 
$max_id = max($ids); 

編集は、おそらくよりよい方法は、XPathである:

$xpath = new DOMXPath($doc); 
$max_id = $xpath->query('//events/record[not(../record/id > id)]/id')->item(0)->nodeValue; 
+0

既にアイテムをループしている場合は、自分でバブルソートすることもできます。 –

+0

ありがとうございました!これは完璧です、私はそれが新しいものが上に表示されるようにしたいと思っていたので、私はバブルを必要としません..しかし、非常にありがとう!それは助けになった! – Ofear

+0

あなたは$ max_idを文字列にしているのですか? – Ofear

1

最大のidを見つけるための最良のツールがXPathです。あなたの結果が順序付けられていない場合には、XPath式は、ビットを得ることができます

$xml = simplexml_load_string($xmlstring); 
$xpath="(//[email protected])[last()]"; 
$lastid=$xml->xpath($xpath); 

:あなたはSimpleXMLオブジェクトを使用していたし、レコードがidで順番にあることが知られていた場合は、IDを取得することは、このような何かを行くだろう毛深いですが、結果をループするよりもずっと速いでしょう。

関連する問題