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