如何使用php检查xml节点的数量并在超过10个时删除
我创建了一个上传表单,可以将名称添加到xml中,但我想检查名称节点的数量,如果有10个,则删除第10个,并在顶部添加一个新的名称节点 我的html是如何使用php检查xml节点的数量并在超过10个时删除,php,xml,forms,count,nodes,Php,Xml,Forms,Count,Nodes,我创建了一个上传表单,可以将名称添加到xml中,但我想检查名称节点的数量,如果有10个,则删除第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
<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是
<?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');
?>
它创建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>
名称1
姓名2
名字3
名字4
名字5
名字6
姓名7
姓名8
名字9
名字10
名字11
等
但我需要做的是,如果超过10个节点删除它们,则计算名称节点
我该怎么做呢?像这样:
$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();
$dom=新的DOMDocument;
$dom->loadXML('
名称1
姓名2
名字3
名字4
名字5
名字6
姓名7
姓名8
名字9
名字10
名字11
名字12
名字13
姓名14
');
$xpath=newdomxpath($dom);
//使用://name[position()>10]删除第十个节点之后的节点
foreach($xpath->query('//name[position()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>
名字5
名字6
姓名7
姓名8
名字9
名字10
名字11
名字12
名字13
姓名14
PHP的DOM类具有用于和的方法
在它们之间,这些方法应该给你你想要的。像这样的事情应该可以做到:
$names = $xmlDoc->getElementsByTagName('name');
if($names->length > 10) {
$firstname = $xmlDoc->getElementsByTagName('name')->item(0);
$removedname = $xmlDoc->removeChild($firstname);
}
(注意:还没有测试过,所以你可能需要调整一下!)“删除它们”如何删除它们?旧名字还是新名字?你想有一个旋转的名字窗口吗?在寻求帮助之前,你需要弄清楚你想要什么。什么是不起作用的解决方案?如果node.length大于10,请删除第10个之后的删除节点。我使用jQueryAjax加载xml文件,只希望显示最后10个。我知道如何使用jquery实现这一点,但我不希望它继续加载一个xml文件,该文件中存储了1000个名称,并且需要一段时间才能加载。我想要的是,当加载xml时,如果node.length<10 do nothing is node.length>10删除存储的最后一个节点或其之后的所有内容,它将计算名称节点。宾果!这就是生意!:-)