07.12.2011, 11:08 | #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. Заранее спасибо! |
|
07.12.2011, 12:46 | #2 |
Участник
|
Пишите универсально для любой таблицы через recordref и fieldref, структура примерно такая
<rec table_no="27"> <f no="1" value="zuzu"/> .... <f no="99999999999" value="zuzu"/> </table> |
|
07.12.2011, 13:02 | #3 |
Участник
|
Ну это само собой буду делать так... но для начало на элементарных примерах хочется увидеть результат... У меня же не отрабатывает почему то
|
|
07.12.2011, 13:15 | #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> |
|
07.12.2011, 13:46 | #5 |
Участник
|
Спасибо InTacto!!!
Мне не хватало вот этой строки: Код: xmldocument.loadxml := '<?xml version="1.0" encoding="utf-8"?><Root/>'; |
|