У меня есть этот XML:
<picture id="2"> <title>B</title> </picture> <picture id="3"> <title>C</title> </picture> <picture id="0"> <title>A</title> </picture>
Попытка добиться этого:
<picture id="1"> <title>B</title> </picture> <picture id="2"> <title>C</title> </picture> <picture id="0"> <title>A</title> </picture>
Используя это, чтобы получить список значений атрибута id:
$objXML = new SimpleXMLElement(XML_FILE_NAME, null, true); $picture = $objXML->xpath('picture'); $arrayCurrent = array(); foreach($picture as $value) { $arrayCurrent[] = (string)$value['id']; } sort($arrayCurrent); // put XML into numerical 'id' order print_r($arrayCurrent);
Он возвращает: Array ([0] => 0 [1] => 2 [2] => 3) Любые идеи, как переиндексировать так: 0, 1, 2 и сохранять соответствующие атрибуты «id» обратно в их правильные позиции в XML-документе?
Спасибо, Энди
В XML
порядке узлов на одном уровне не имеет значения, тогда вы не можете сделать это по теории, по практике пользовательской другой библиотеки.
Численный порядок идентификаторов поддерживается и выполняется последовательно:
$objXML = new SimpleXMLElement(XML_FILE_NAME, null, true); $picture = $objXML->xpath('picture'); usort($picture, create_function('$a,$b', 'return (string)$a["id"] - (string)$b["id"];')); foreach ($pictures as $index => $node) $node["id"] = $index;