|
|
#1 |
|
Участник
|
Добрый день всем.
Передо мной встала задача провести выгрузку а затем загрузку данных в XML формате. Начал разбираться с XMLport-ами вначале. Почитав форум пришёл к выводу что нужно делать через XMLDOM. Наваял простенький примерчик Код:
rItem.RESET;
rItem.SETRANGE("No.",'1000','9000');
CREATE(XMLDocOut);
ProcesType := '';
XMLCurrNode := XMLDocOut.documentElement;
WITH XMLDOMManagement DO BEGIN
IF AddElement(
XMLCurrNode,'NO',
rItem."No.",DocNameSpace,XMLNewChild) > 0
THEN
EXIT;
IF AddElement(
XMLCurrNode,'DESCRIPTION',
rItem.Description,DocNameSpace,XMLNewChild) > 0
THEN
EXIT;
IF AddElement(
XMLCurrNode,'UNIT_PRICE',
FORMAT(rItem."Unit Price"),DocNameSpace,XMLNewChild) > 0
THEN
EXIT;
END;
XMLDocOut.save(path);Цитата:
Не создан экземпляр этой переменной автоматизации.
Чтобы создать экземпляр, можно создать новую переменную или присвоить значение существующей. Решил упростить пример... точнее позаимствовал до нельзя простенький пример из форума http://forum.mazzy.ru/index.php?show...63&#entry28563 Код:
CREATE(xmlDocument);
xmlDocument.load(path);
xmlHeader := xmlDocument.documentElement;
xmlRecord := xmlDocument.createNode('element','Record',''); // тут ошибка
xmlHeader.appendChild(xmlRecord);
xmlDocument.save(path);Версия NAV 2009. XMLDOM пробовал 3-ю версию и 6-ю. Что я не так делаю? Признаюсь честно до этого с XML не работал. Поэтому буду очень признателен за рабочий кусок кода выгрузки из какой либо таблицы(по фильтру), выбранных полей в XML. Заранее спасибо! |
|
|
|
|
#2 |
|
Участник
|
Пишите универсально для любой таблицы через recordref и fieldref, структура примерно такая
<rec table_no="27"> <f no="1" value="zuzu"/> .... <f no="99999999999" value="zuzu"/> </table> |
|
|
|
|
#3 |
|
Участник
|
Цитата:
|
|
|
|
|
#4 |
|
Участник
|
У xml документа строгая внутренняя структура, похожая на дерево, и должен быть обязательный корневой элемент.
Есть замечательный кодеюнит 6224 XML DOM Management, в котором собраны ф-ции для работы с xml документом с отловом ошибок. Пример будет построен на использовании ф-ций, указанного кодеюнита. Код: CREATE(xmlDocument);
// тэг Root будет нашим корнем.
// при создании документа в loadxml подставляется начальный заголовок файла,
// а при разборе путь до загружаемого файла
xmldocument.loadxml := '<?xml version="1.0" encoding="utf-8"?><Root/>';
// Указываем переменную на корневой элемент
XMLNode := xmldocument.documentElement;
IF AddElement(XMLNode,'Message', '', NameSpace, XMLNodeChild) > 0 THEN
EXIT;
//Переходим внутрь тега Message
XMLNode := XMLNodeChild;
IF AddElement(XMLNode, 'sender', 'Вася', NameSpace, XMLNodeChild) > 0 THEN
EXIT;
IF AddElement(XMLNode, 'recipient', 'Петя', NameSpace, XMLNodeChild) > 0 THEN
EXIT;
IF AddElement(XMLNode, 'issue', format(today), NameSpace, XMLNodeChild) > 0 THEN
EXIT;
// переходим в тэг root
XMLNodeChild := XMLNode;
XMLNode := XMLNodeChild.parentNode;
// Создаем следующий тег
IF AddElement(XMLNode, 'Message2', '', NameSpace, XMLNodeChild) > 0 THEN
EXIT;
XMLNode := XMLNodeChild;
IF AddElement(XMLNode, 'Item', 'Велик', NameSpace, XMLNodeChild) > 0 THEN
EXIT;
xmldocument.save(path);Переменные XMLNode Automation 'Microsoft XML, v3.0'.IXMLDOMNode XMLNodeChild Automation 'Microsoft XML, v3.0'.IXMLDOMNode NameSpace Text 255 Документ будет иметь следующий вид: Код: <?xml version="1.0" encoding="utf-8" ?>
<Root>
<Message>
<sender>Вася</sender>
<recipient>Петя</recipient>
<issue>2011-12-02</issue>
</Message>
<Message2>
<Item>Велик</Item>
</Message2>
</Root> |
|
|
|
|
#5 |
|
Участник
|
Спасибо InTacto!!!
Мне не хватало вот этой строки: Код: xmldocument.loadxml := '<?xml version="1.0" encoding="utf-8"?><Root/>'; |
|
|