#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