0

我有这个问题:

这是我的 .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 天,但没什么!:(

4

2 回答 2

1

尝试类似:

$xpath = new DOMXpath($datos);
$lastIdSuc = $xpath->query('/listado/sucursal[last()]/idSuc')->item(0)->nodeValue;

<input name="idSuc" value="<?php echo $lastIdSuc; ?>">
于 2013-09-02T09:39:25.263 回答
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 才能找到它。

于 2013-09-02T03:11:31.467 回答