使用 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 标签。
我怎样才能做到这一点?
Edit
这是 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
您可以使用 XPath last()
找到最后一个 <Example>
元素,然后 return 对应的 <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
我需要将新标签附加到 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 标签。
我怎样才能做到这一点?
Edit
这是 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
您可以使用 XPath last()
找到最后一个 <Example>
元素,然后 return 对应的 <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