php: Xpath ant уникальный идентификатор - PullRequest
1 голос
/ 21 декабря 2010

Я работаю с PHP и Xpath и при сохранении данных мне нужно вставить уникальный идентификатор.Как в SQL автоинкремент.

Как сделать это в Xpath?Файл:

<info>
  <id>1</id>
  <name>test</name>
</info>
<info>
  <id>2</id>
  <name>some</name>
</info>
....
<id>5</id>
<name>testttt</id>

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Я полагаю, что это будет что-то вроде:

//info[last()]/id

Итак, с PHP DOMDocument для каждого примера:

$dom = new DOMDocument;
$dom->load('data.xml');

$xpath = new DOMXPath($dom);
$lastId = $xpath->query('//info[last()]/id')->item(0)->nodeValue;
$nextId = $lastId+1;

Выше предполагается, что последний узел имеет наибольший идентификатор.

В вашем случае невозможно вычислить следующий идентификатор только с помощью XPath.XPath 2.0 предоставляет функцию max для этого:

max(//info/id)

Однако XPath 2.0 пока не поддерживается во встроенных библиотеках PHP.

1 голос
/ 22 декабря 2010

Я работаю с PHP и Xpath и при сохранении данных мне нужно вставить уникальный идентификатор.Как в SQL автоинкремент.

Как сделать это в Xpath?

Новое значение для id можно рассчитать в одном выражении XPath 1.0 :

(//id)
  [not(. 
       <            
       (preceding::id|following::id|ancestor::id|descendant::id)
      )
  ]
    [1] +1

Объяснение : Это выражение выбирает из всех элементов id в документе один, который не меньше, чем любой другой элемент id в документе.Затем добавляет 1 к этому значению, и мы получаем новое значение для использования в качестве идентификатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...