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