我遇到了这个问题:
这是我的.xml
<listado>
<sucursal> //first sucursal
<idSuc>1</idSuc>
<nombre>Peru</nombre>
</sucursal>
.//here there are 48 more “sucursal”--- 50 nodes total...
<sucursal>
<idSuc>53</> // last sucursal
<nombre>Abasto</nombre>
</sucursal>
</listado>
... ..
我需要(在变量php中)不是“sucursal”或“idSuc”(在这种情况下为“50”)的计数,而是最后一个“idSuc”的值(在我的情况下为“53”)。 .. 我不想将“idSuc”设置为“sucursal”(xe)的属性,因为它们是从表单($ _POST)等获取的基准。
我正在尝试使用“xpath”和“lastchild”等等......但没有......而且“长度”还可以,但这不是我需要的......因为它在我的工作中毫无用处。
代表:
<?php $datos= new DOMDocument();
$datos->load('datos2.xml');
$sucs = $datos->getElementsByTagName("sucursal");
$id = $datos->getElementsByTagName("idSuc"); ?> ..
?>
然后以我需要这个“值”的形式:
<form method="POST"....> <input name="idSuc" value="<?php print_r($id->length+1)?>"..>
还有:
value="<?php print_r($id->last_child.value+1)?>"
- 格式为$elements->xpath('listado/sucursal [last()]');
然后我尝试在表格中打印$elements
....没有还有很多我现在都不记得了,因为我删除了所有.. :(
请...,有人可以帮助我!!或者只是提出一个不同的想法...... ??!
非常感谢!!我已经和这4天一起工作了! :(
答案 0 :(得分:0)
首先,您应该像这样加载XML:
$datos->load('datos2.xml', LIBXML_NOBLANKS);
这样,所有空白节点(甚至是空格)都会被忽略。现在,这一行
$sucs = $datos->getElementsByTagName("sucursal");
将所有的sucursal节点作为DOMNodeList给出,因此,要获得最后一个节点,请执行以下操作:
$last = $sucs->item($sucs->length - 1);
,它会为您提供DOMNode个对象。现在你需要它的孩子,你可以这样:
$suc_children = $last->childNodes;
childNodes 是另一个DOMNodeList。如果您确定元素idSuc将始终是第一个元素,那么您可以使用
获取它$id_suc = $suc_children->firstChild->nodeValue;
首先检查是否有$ suc_children,否则您将无法获取ID:
if($suc_children->hasChildNodes())
$id_suc = $suc_children->firstChild->nodeValue;
// You could do $suc_children->item(0)->nodeValue too
如果你不确定第一个元素是idSuc,那么你将不得不遍历DOMNodeList来找到它。
答案 1 :(得分:0)
尝试类似:
$xpath = new DOMXpath($datos);
$lastIdSuc = $xpath->query('/listado/sucursal[last()]/idSuc')->item(0)->nodeValue;
和
<input name="idSuc" value="<?php echo $lastIdSuc; ?>">