如何回显节点值(不是属性)

时间:2013-09-02 00:24:12

标签: php xml xpath nodes

我遇到了这个问题:

这是我的.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天一起工作了! :(

2 个答案:

答案 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; ?>">