使用SimpleXML读取最后一个标记ID


Using SimpleXML to read the last tag ID

我需要将新标签附加到XML文件中,我可以通过使用以下代码来实现这一点:

$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);

我的问题是ID。
基本上,我需要获得最后一个ExampleID,并将其递增到新的Example标记。

我怎样才能做到这一点?

编辑

这就是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>

您可以使用XPATH。这是解决方案。

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

解决方案取自http://php.net/manual/en/simplexmlelement.xpath.php&https://stackoverflow.com/a/3786761

您可以使用XPath last()查找最后一个<Example>元素,然后返回相应的<ExampleID>子元素:

//Example[last()]/ExampleID

或者,您可以找到最大ExampleID,如另一个答案所述:

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

演示:(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;

输出:

2