как получить simpleXML для создания идентификатора - PullRequest
0 голосов
/ 19 января 2010

У меня есть захватывающий xml-файл с идентификаторами 1 - 20, когда я создаю новый xml-файл, он мне нужен, чтобы добавить идентификатор в файл. Как я могу это сделать?

Я знаю, как бы вы сделали это с SQL, но не с xml

, пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 19 января 2010

если ваш xml уже упорядочен от низшего к высшему, вы можете выполнить этот запрос xpath:

$res = $doc->xpath('/list/a[not(@id <= preceding-sibling::a/@id) and ' .
  'not(@id <= following-sibling::a/@id)]/@id');

$nextId = is_array($res) && count($res) ? (intval($res[0]->id) + 1) : 0;

в противном случае вы можете найти максимальный идентификатор следующим образом (при условии, что id является атрибутом):

$xml = '<list><a id="1" /><a id="2" /><a id="3" /></list>';
$doc = simplexml_load_string($xml);
$max = -1;
foreach ($doc->xpath('/list/a/@id') as $el) {
  $i = intval($el->id); if ($i > $max) $max = $i;
}
echo "Max: $max"; 

вышеприведенный выводит «3», поэтому ваш новый идентификатор равен 4

или используйте решение Вегера , которое также будет работать

0 голосов
/ 19 января 2010

Найдите самый высокий идентификатор в вашем существующем файле, используя некоторый запрос XPath и код php.

$ids = $xml->xpath("element/id"); // or something that fits your XML document
asort($ids);                      // or use some other sorting algorithm
$highest_id = end($ids);

Я не очень хорошо разбираюсь в запросах xpath, поэтому, возможно, есть некоторая хитрость для сортировки во время запроса, но кто-то другой, возможно, укажет на это, если этот пример можно оптимизировать.

Затем создайте новый XML-документ и добавьте в него самый высокий идентификатор.

...