AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.02.2008, 10:57   #1  
Pavlo AKA Panok is offline
Pavlo AKA Panok
Участник
 
64 / 10 (1) +
Регистрация: 01.05.2002
Адрес: Москва
Формирование XML файла - приведите пример плиз!
Привет!

Не мог бы кто-нибудь привести пример формирования вот такого кусочка XML файла с помощью классов, работающих с XML.

вот кусочек:
<?xml version="1.0" encoding="windows-1251"?>
<НДФЛ2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсФорм="4.00001" ВерсПрог="НП 11.57" ИдФайл="ДОХОД_2НДФЛ_5003_5003056392500301001_20080211_1">
<Справка>
<ОбщСвИЧ>
<ГодДох>2007</ГодДох>
<НомСпр>1</НомСпр>
<ДатаСпр>11.02.2008</ДатаСпр>
<ИФНСНА>5003</ИФНСНА>
</ОбщСвИЧ>

Да, да, в налоговую хотим файлик сгенерить...
Старый 20.02.2008, 11:04   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
можно просто воткнуть это в текстовый файл с нужным расширением ".xml"
Старый 20.02.2008, 11:11   #3  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
простейший пример создания с помошью классов:
X++:
    XMLElement              elementRoot;
    XMLElement              elementLines;
    ;
    document        = new XMLDocument();
    document.appendChild(document.createProcessingInstruction("xml", 'version="1.0" encoding="UTF-8"'));
    elementRoot     = document.createElement("TagName");
    document.appendChild(elementRoot);
    elementRoot.setAttribute("Name", "Value");
    elementLines    = document.createElement("TagName");
    elementRoot.appendChild(elementLines);
    document.save(fileName);
Старый 20.02.2008, 11:13   #4  
Pavlo AKA Panok is offline
Pavlo AKA Panok
Участник
 
64 / 10 (1) +
Регистрация: 01.05.2002
Адрес: Москва
это какойто неправильный вариант... столько классов то не зря нам предоставили. А вот ясных примеров использования я чтото ненашел ни в АОТ ни здесь
Старый 20.02.2008, 11:15   #5  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Pavlo AKA Panok Посмотреть сообщение
это какойто неправильный вариант... столько классов то не зря нам предоставили
Старый 20.02.2008, 11:22   #6  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
я прям прослезился..
поверь с помошью этих 2х классов можно создать xml файл
Старый 20.02.2008, 11:31   #7  
Pavlo AKA Panok is offline
Pavlo AKA Panok
Участник
 
64 / 10 (1) +
Регистрация: 01.05.2002
Адрес: Москва
Цитата:
Сообщение от ice Посмотреть сообщение
я прям прослезился..
поверь с помошью этих 2х классов можно создать xml файл
Нда... действительно смешно...

Это я просто очень долго отвечал на твой первый пост
Старый 20.02.2008, 11:34   #8  
Pavlo AKA Panok is offline
Pavlo AKA Panok
Участник
 
64 / 10 (1) +
Регистрация: 01.05.2002
Адрес: Москва
Спасибо, щас потестю
Старый 20.02.2008, 11:41   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А как вот такую конструкцию задать?

<НДФЛ2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

В смысле, правильно, а не просто через SetAttribute
Старый 20.02.2008, 11:43   #10  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Только вот этот кусочек:
X++:
<?xml version="1.0" encoding="windows-1251"?>
у меня не получилось воткнуть (съедается указание кодировки), поэтому решил "в лоб":
создаю объект не при помощи:
X++:
    document        = new XMLDocument();
    document.appendChild(document.createProcessingInstruction("xml", 'version="1.0" encoding="UTF-8"'));
а таким образом:
X++:
    COM               dom;
    dom                = XMLDocument::XMLDOM();
    document        = xmlNode::construct(dom);
А после заполнения:
X++:
// Финт ушами имени хитрого Алексея Климова
    resText = '<?xml version="1.0" encoding="Windows-1251" ?>' + "\n" + document.xml();

    txtBuffOut  = new TextBuffer();
    txtBuffOut.setText(resText);
    txtBuffOut.toFile(FileName);
Старый 20.02.2008, 11:45   #11  
Pavlo AKA Panok is offline
Pavlo AKA Panok
Участник
 
64 / 10 (1) +
Регистрация: 01.05.2002
Адрес: Москва
Вот что он мне выдал:

<?xml version="1.0" encoding="UTF-8"?>
<TagName Name="Value"><TagName/></TagName>


все равно не ясно - что это за <TagName/>?

Нужна же простая вещь -

<Tag1>
<Tag2>
<Tagname>Value</TagName>
</Tag1>
</Tag2>

Ведь просто както должно делаться
Старый 20.02.2008, 11:49   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Pavlo AKA Panok Посмотреть сообщение
Вот что он мне выдал:

<?xml version="1.0" encoding="UTF-8"?>
<TagName Name="Value"><TagName/></TagName>


все равно не ясно - что это за <TagName/>?
TagName пустой тег, потому что в него ничего не добавили.

Вот так можно, к примеру, добавив такую строку перед сохранением в файл
X++:
elementLines.appendChild(document.createTextNode("Hello"));
Старый 20.02.2008, 11:51   #13  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
elementLines.text("Value");

Последний раз редактировалось ice; 20.02.2008 в 12:25. Причина: исправил nodeValue на text
Старый 20.02.2008, 11:55   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от ice Посмотреть сообщение
elementLines.nodeValue("Value");
Так врядли сработает - elementLines это тэг типа Element. А у него вроде не может быть value
Старый 20.02.2008, 13:40   #15  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Вообще с XMLDocument можно как только не извращаться. Вот, например, вариант действия только через CreateNode и AppendChild:
X++:
    TextBuffer              txtBuffOut;
    XMLDocument             xmlDoc;
    XMLElement              documentNode, lineItemNode, elemNode, valueNode;
    COM                     dom;
    str                     resText;
    ;

    dom             = XMLDocument::XMLDOM();
    xmlDoc          = xmlNode::construct(dom);

    documentNode    = xmlDoc.createNode(XMLNodeType::ELEMENT, "Tag1", "");

    while (  - )
        where (-)
    {
	    lineItemNode    = xmlDoc.createNode(XMLNodeType::ELEMENT, "Tag2", "");

            // Для каждого поля
            elemNode    = xmlDoc.createNode(XMLNodeType::ELEMENT, "Fileld1", "");
            valueNode   = xmlDoc.createNode(XMLNodeType::TEXT, "", "");
            valueNode.nodeValue("Значение поля 1");
            elemNode.appendChild(valueNode);
            lineItemNode.appendChild(elemNode);

		...

            elemNode    = xmlDoc.createNode(XMLNodeType::ELEMENT, "FileldN", "");
            valueNode   = xmlDoc.createNode(XMLNodeType::TEXT, "", "");
            valueNode.nodeValue("Значение поля N");
            elemNode.appendChild(valueNode);
            lineItemNode.appendChild(elemNode);

            documentNode.appendChild(lineItemNode);
        }
    }

    xmlDoc.appendChild(documentNode);

    resText = '<?xml version="1.0" encoding="Windows-1251" ?>' + "\n" + xmlDoc.xml();

    txtBuffOut  = new TextBuffer();
    txtBuffOut.setText(resText);
    txtBuffOut.toFile(FileName);
Старый 20.02.2008, 18:37   #16  
Pavlo AKA Panok is offline
Pavlo AKA Panok
Участник
 
64 / 10 (1) +
Регистрация: 01.05.2002
Адрес: Москва
А как бы так сделать, чтобы он выдавал их вот так:

<Tag1>
<Tag2>
<Tagname>Value</TagName>
</Tag1>
</Tag2>

а не так (как сейчас):
<Tag1><Tag2><Tagname>Value</TagName></Tag1></Tag2>
Старый 20.02.2008, 23:34   #18  
vladz is offline
vladz
Участник
 
14 / 14 (1) ++
Регистрация: 26.01.2006
Цитата:
Сообщение от kashperuk Посмотреть сообщение
А как вот такую конструкцию задать?

<НДФЛ2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

В смысле, правильно, а не просто через SetAttribute
По-моему, можно так:

X++:
    ..    
    xmlAttribute xmlAttr;
    ;
    xmlAttr = xml.createAttribute("xmlns:xsi");
    xmlAttr.nodeValue("http://www.w3.org/2001/XMLSchema-instance");
    myXml.attributes().setNamedItem( xmlAttr );
Старый 20.02.2008, 23:41   #19  
vladz is offline
vladz
Участник
 
14 / 14 (1) ++
Регистрация: 26.01.2006
[quote=Raven Melancholic;160335]Только вот этот кусочек:
X++:
<?xml version="1.0" encoding="windows-1251"?>
у меня не получилось воткнуть (съедается указание код..

X++:
    xmlPI = xml.createProcessingInstruction("xml", 'version="1.0" encoding="windows-1251"');

    xml.insertBefore( xmlPI, myXml.com() );  // это для 3.0
//  xml.insertBefore( xmlPI, myXml );    // в 4.0
Теги
xml

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dax-lessons: Generate XML Documentation Files for a project - DAX 2009 Blog bot DAX Blogs 0 08.08.2008 19:06
axStart: How to use XSLT in AIF and what’s wrong with empty xml Nodes. Blog bot DAX Blogs 0 27.04.2008 18:07
Inside Dynamics AX 4.0: The XML Structure Blog bot DAX Blogs 0 04.10.2007 11:20
Формирование XML через SAX2 Armoshka DAX: Программирование 13 06.06.2007 10:24
Импорт данных из XML файла Sanek DAX: Программирование 0 01.04.2005 17:56

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.