2016-05-16 14 views
1

ich neue Tags in eine XML-Datei anhängen müssen lesen, und ich kann dies erreichen, indem Sie diesen Code verwenden:SimpleXML Mit dem letzten Tag-ID

$file = 'xml/config.xml'; 

$xml = simplexml_load_file($file); 

$galleries = $xml->examples; 

$gallery = $galleries->addChild('Example'); 
$gallery->addChild('ExampleID', '123'); 
$gallery->addChild('ExampleText', 'this is text'); 
$gallery->addChild('ExampleDate', '23/12/1234'); 

$xml->asXML($file); 

Mein Problem der Identifikation ist.
Grundsätzlich muss ich die letzte ExampleID abrufen und sie auf das neue Example-Tag erhöhen.

Wie kann ich das erreichen?

bearbeiten

Dies ist die XML-Struktur:

<Examples> 
    <Example> 
    <ExampleID>1</ExampleID> 
    <ExampleText>this is text</ExampleText> 
    ... 
    </Example> 
    <Example> 
    <ExampleID>2</ExampleID> 
    <ExampleText>this is the secont text</ExampleText> 
    ... 
    </Example> 
</Examples> 
+0

Können Sie Ihre 'xml' Datei Code posten? –

+0

Ich dachte, dass es einfach war, es mit dem Code herauszufinden. Ich werde ein Beispiel veröffentlichen. –

Antwort

0

Sie XPath last() verwenden können, das letzte <Example> Element zu finden, und dann wieder die entsprechende <ExampleID> Kind:

//Example[last()]/ExampleID 

Alternativ können Sie finden die maximal ExampleID, wie in der anderen Antwort erwähnt:

//ExampleID[not(. < //ExampleID)] 

Demo: (eval.in)

$raw = <<<XML 
<Examples> 
    <Example> 
    <ExampleID>1</ExampleID> 
    <ExampleText>this is text</ExampleText> 
    ... 
    </Example> 
    <Example> 
    <ExampleID>2</ExampleID> 
    <ExampleText>this is the secont text</ExampleText> 
    ... 
    </Example> 
</Examples> 
XML; 
$xml = simplexml_load_string($raw); 
$lastID = (string)$xml->xpath("//Example[last()]/ExampleID")[0]; 
echo $lastID; 

Ausgang:

2 
+0

Ich werde es ausprobieren, nachdem ich einen Bug mit WAMP gelöst habe. –

+0

Ich kann die letzte() ID bekommen, danke! –

1

Sie XPATH verwenden können. Hier ist die Lösung.

(string)$xml->xpath("//Examples/Example[not(../Example/ExampleID > ExampleID)]")[0]->ExampleID 

Lösung genommen von http://php.net/manual/en/simplexmlelement.xpath.php & https://stackoverflow.com/a/3786761

+0

Können Sie die [0] erklären? Außerdem muss ich die ID des letzten Beispiels abrufen, nicht die erste. –

+0

Sie möchten die maximale Beispiel ID richtig? Eignet es sich für Ihren Zweck? '[0]' ist für den ersten 0 Index –

+0

Die Beispiele Länge ist genau das, was ich brauche, um das letzte Beispiel zu bekommen. Wie kann ich es bekommen? –