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>

…..

「sucursal」または「idSuc」の数 (この場合は「50」) ではなく、最後の「idSuc」の値 (私の場合は「53」) を (変数 php で) 取得する必要があります... 「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

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 に答える