2011-06-29 9 views
0

名前をXMLに追加するフォームをアップロードしましたが、名前ノードの数を確認して10を削除して10を削除し、 1つはトップに。xmlノードの数を確認し、PHPを使用して10を超える場合に削除する方法

私のhtmlは

<form name="form" id="form" action="insert.php" method="post" >  
<label for="name">Name:</label> <br /> 
<input type="text" name="name" id="name" /> <br />  
<button type="submit" id="button">Submit</button> 
</form> 

あるとinsert.phpはnames.xmlそうのような作成

<?php 

header('Location:index.php'); 

$xmldoc = new DOMDocument(); 
$xmldoc->load('names.xml'); 

$Name = $_POST['name']; 

$root = $xmldoc->firstChild; 

$fileName = $xmldoc->createElement('name'); 

$root->appendChild($fileName); 

$newText1 = $xmldoc->createTextNode($Name); 

$fileName->appendChild($newText1); 

$xmldoc->save('names.xml'); 

?> 

です:

<?xml version="1.0"?> 
<item> 
<name>Name1</name> 
<name>Name2</name> 
<name>Name3</name> 
<name>Name4</name> 
<name>Name5</name> 
<name>Name6</name> 
<name>Name7</name> 
<name>Name8</name> 
<name>Name9</name> 
<name>Name10</name> 
<name>Name11</name> 
etc. 

</item> 

しかし、私はカウントされませんする必要があります10を超えるノードがあればノード名を付けてください。

どうすればいいですか?そのよう

+1

どのようにそれらを削除し、「彼らは削除」このようなものは、トリックを行う必要がありますか?古い名前か新しい名前か?あなたは名前の回転ウィンドウが欲しいですか?あなたは助けを求める前に、あなたが望むものを見つけ出す必要があります。何がうまくいかなかったあなたの解決策は何でしたか? – Xorlev

+0

node.lengthが> 10の場合、10番目のノードの後に​​ノードを削除します。私はxmlファイルをロードするためにjquery ajaxを使用していますが、最後の10だけが表示されます。私はjqueryでこれを達成する方法を知っていますが、私は1000の名前が格納されているxmlファイルをロードし続けたいと思っていませんし、ロードするのに時間がかかります。 xmlがロードされるとき、node.length <10が何もしない場合はnode.length> 10という名前のノードが最後に保存されたノードを削除します。 –

答えて

0

$dom = new DOMDocument; 
$dom->loadXML('<?xml version="1.0"?> 
<item> 
    <name>Name1</name> 
    <name>Name2</name> 
    <name>Name3</name> 
    <name>Name4</name> 
    <name>Name5</name> 
    <name>Name6</name> 
    <name>Name7</name> 
    <name>Name8</name> 
    <name>Name9</name> 
    <name>Name10</name> 
    <name>Name11</name> 
    <name>Name12</name> 
    <name>Name13</name> 
    <name>Name14</name> 
</item> 
'); 

$xpath = new DOMXPath($dom); 

// use: //name[position() > 10] to remove nodes after the tenth 
foreach ($xpath->query('//name[position() < count(//name) - 9]') as $nameNode) { 
    $nameNode->parentNode->removeChild($nameNode); 
} 

echo $dom->saveXML(); 

出力

<item> 
    <name>Name5</name> 
    <name>Name6</name> 
    <name>Name7</name> 
    <name>Name8</name> 
    <name>Name9</name> 
    <name>Name10</name> 
    <name>Name11</name> 
    <name>Name12</name> 
    <name>Name13</name> 
    <name>Name14</name> 
</item> 
+0

ビンゴ!それはビジネスですね! :-) –

0

PHPのDOMクラスはRemoveChildgetElementsByTagNameためのメソッドを持っています。

これらのメソッドの間で、これらのメソッドは必要なものを提供する必要があります。

$names = $xmlDoc->getElementsByTagName('name'); 

if($names->length > 10) { 
    $firstname = $xmlDoc->getElementsByTagName('name')->item(0); 
    $removedname = $xmlDoc->removeChild($firstname); 
} 

(注意::!まだそれをテストしていない、しかし、あなたはそれを少し微調整が必​​要になる場合がありますので)

関連する問題