Частичные XML-файлы

#xml #delphi

Вопрос:

Я давний пользователь Delphi, но новичок в XML. У меня есть ситуация, которая, как я думал, будет обычной, но, похоже, это не так. Я подключаюсь к серверу, который отправляет несколько xml-файлов. При первом подключении сервер отправляет все полные документы. Однако после этого он отправляет только ту информацию, которая изменилась. Является ли это обычной практикой? (Сделано в данном случае для уменьшения пропускной способности в сети). Например, документ может иметь несколько дочерних узлов, каждый из которых имеет несколько атрибутов. Однако обновление может быть документом только с одним дочерним элементом и одним измененным атрибутом. Я не могу найти способ изменить существующий документ с помощью частичного документа.

Пример (маленький), отправленный в первый раз:

 <Status TOD="1620548058.4754" Status="Green" Event="R7" PartNumber="1" SubPart="0" />
 

Второй раз, изменения только:

 <Status TOD="1620548061.5434" Status="Red" />
 

Использование Delphi 10.

Комментарии:

1. Это не обычная практика. Вы можете использовать API DOM для изменения исходного документа. Является TOD ли атрибут идентификатором?

2. Если у вас есть исходный документ, загруженный в DOM, вы можете проанализировать второй документ и просто обновить первый. Вероятно, довольно легко написать такой код, если предположить, что структура документа так проста, как вы показали в вопросе.

3. Как эта практика отправки только дельт (что изменилось) различает установку атрибута/целого узла пустым и его полное удаление? Насколько ясно, что вы должны добавлять узлы вместо замены существующих? Или наоборот?

4. Можем ли мы предположить, что такой атрибут, как Event="R7" никогда не удаляется?

5. Возможно, вы могли бы использовать функцию CloneNodeToDoc из Xml.xmlDoc в качестве вдохновения для написания собственного MergeNodeToDoc