|  | 
|  20.02.2008, 10:57 | #1 | 
| Участник | Формирование 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 | 
| Участник | 
			
			можно просто воткнуть это в текстовый файл с нужным расширением ".xml"
		 | 
|  | 
|  20.02.2008, 11:11 | #3 | 
| Участник | 
			
			простейший пример создания с помошью классов: 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 | 
| Участник | 
			
			это какойто неправильный вариант... столько классов то не зря нам предоставили. А вот ясных примеров использования я чтото ненашел ни в АОТ ни здесь    | 
|  | 
|  20.02.2008, 11:15 | #5 | 
| Участник | |
|  | 
|  20.02.2008, 11:22 | #6 | 
| Участник | 
			
			я прям прослезился.. поверь с помошью этих 2х классов можно создать xml файл | 
|  | 
|  20.02.2008, 11:31 | #7 | 
| Участник | |
|  | 
|  20.02.2008, 11:34 | #8 | 
| Участник | 
			
			Спасибо, щас потестю
		 | 
|  | 
|  20.02.2008, 11:43 | #9 | 
| Участник | 
			
			Только вот этот кусочек: 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, 23:41 | #10 | 
| Участник | 
			
			[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 | 
|  | 
|  20.02.2008, 11:41 | #11 | 
| Участник | 
			
			А как вот такую конструкцию задать? <НДФЛ2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" В смысле, правильно, а не просто через SetAttribute | 
|  | 
|  20.02.2008, 23:34 | #12 | 
| Участник | Цитата: X++:     ..    
    xmlAttribute xmlAttr;
    ;
    xmlAttr = xml.createAttribute("xmlns:xsi");
    xmlAttr.nodeValue("http://www.w3.org/2001/XMLSchema-instance");
    myXml.attributes().setNamedItem( xmlAttr ); | 
|  | 
|  20.02.2008, 11:45 | #13 | 
| Участник | 
			
			Вот что он мне выдал: <?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 | #14 | 
| Участник | Цитата: Вот так можно, к примеру, добавив такую строку перед сохранением в файл X++: elementLines.appendChild(document.createTextNode("Hello")); | 
|  | 
|  20.02.2008, 11:51 | #15 | 
| Участник | 
			
			elementLines.text("Value");
		 Последний раз редактировалось ice; 20.02.2008 в 12:25. Причина: исправил nodeValue на text | 
|  | 
|  20.02.2008, 11:55 | #16 | 
| Участник | 
			
			Так врядли сработает - elementLines это тэг типа Element. А у него вроде не может быть value
		 | 
|  | 
|  20.02.2008, 13:40 | #17 | 
| Участник | 
			
			Вообще с 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 | #18 | 
| Участник | 
			
			А как бы так сделать, чтобы он выдавал их вот так: <Tag1> <Tag2> <Tagname>Value</TagName> </Tag1> </Tag2> а не так (как сейчас): <Tag1><Tag2><Tagname>Value</TagName></Tag1></Tag2> | 
|  | 
|  20.02.2008, 22:36 | #19 | 
| Участник | 
			
			Вот здесь ответ на этот вопрос: XMLDocument вставка нового xmlElement c переходом на новую строку? | 
|  |