4

この質問は非常にばかげているように思えるかもしれませんが、PHP を使用して最後の子のノード値を見つける方法については、JS を使用した簡単な方法であるにもかかわらず、あまり助けを見つけることができません。これは私のXMLが現在どのように見えるかです:

<?xml version="1.0"?>
<files>
 <file>.DS_Store</file>
 <file>ID2PDF_log_1.xml</file>
 <file>ID2PDF_log_12.xml</file>
 <file>ID2PDF_log_15.xml</file>
</files>

phpコードは次のとおりです。

$filename = 'files.xml'; //my xml file name
$dom = new DomDocument();
$dom->load($filename);

$elements = $dom->getElementsByTagName('file');
echo $elements->lastChild(); // This is obviously not working
/*I get an error that I am trying to access an undefined method in DOMNodeList. Now, I know
that lastChild is a property of DOMNode. But I can't figure out how I can change my code to 
get this to work.*/  

声を出そうとしています

ID2PDF_log_15.xml

誰でもこれを行う方法を教えてもらえますか?

PS: xml ファイル構造を変更したくありません。スクリプトを使用して作成していて、怠惰なプログラマーだからです。しかし、私はこれを取得するために調査を行いました。役に立ちませんでした。

ノード 'file' の要素数を取得してから item(#) を使用しようとしましたが、それもうまくいかないようでした。

ありがとう

解決

$filename = 'files.xml';
$dom = new DomDocument();

$dom->load($filename);

$elements = $dom->getElementsByTagName('file')->length;
echo 'Total elements in the xml file:'.$elements."\n";

$file = file_get_contents('files.xml');
$xml = simplexml_load_string($file); 

$result = $xml->xpath('file');
echo "Last element".$result[$elements-1]."\n";

後でもう少しきれいにします。しかし、将来新しいユーザーがいる場合は、とにかく答えを共有する必要があると思いました.

4

2 に答える 2

10

これはうまくいくはずです:

$elements->xpath('root/child[last()]');

xpath について読む

または、要素の数を数えてから、その数を使用して最後の要素をターゲットにすることをお勧めします。

$file_count = $elements->getElementsByTagName('file')->length;
$elements[$file_count];
于 2013-01-08T17:55:19.713 に答える
1

私はこのようにしました:

$elements = $dom->getElementsByTagName('file')->item(0);
echo $elements->lastChild->nodeValue;
于 2015-06-18T16:51:21.690 に答える