powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / XML - как его генерировать по умному?
25 сообщений из 27, страница 1 из 2
XML - как его генерировать по умному?
    #37199336
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть несколько программ, в которых я генерю XML. Когда более менее простой случай, там всё выглядит прилично. Но когда куча ветвлений и условий, и результирующий XML выходит очень разный, при разных стартовых условиях, то получаются такие дебри, что почти невозможно понять что и откуда растёт, и поддержка становится затруднительной. Сейчас мне нужно написать очередной модуль выгрузки XML, для очередной программы. Хочу на этот раз по умному сделать, и чтобы не возникало потом ошибок, типа незакрытых тегов, после чего фиг найдёшь, где я это забыл вставить. Есть ли какие-то статьи, книги или советы по этому поводу?
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37199363
авторh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo, язык хотя бы назвал

Используй библиотечные решения типа XmlWriter( http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx ) в .NET'е или xml.dom.minidom в python
( http://www.postneo.com/projects/pyxml/ ).
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37199374
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторhXDiaBLo, язык хотя бы назвал

Используй библиотечные решения типа XmlWriter( http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx ) в .NET'е или xml.dom.minidom в python
( http://www.postneo.com/projects/pyxml/ ).
Да мне бы общие идеи. Но вообще, С++ Билдер. Пока обходился без всяких либ, генерил чисто со всякими if в обычную строку. Т.к. никогда не было времени взять и всерьёз что-нибудь изучить перед разработкой, сразу бац, и задание, чтобы через пару дней всё было готово, любой ценой.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37199393
BpeguH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со всем уважением, судя по over 16k сообщений и горке тем ни о чем, таки время попи*деть у Вас есть. Используйте его во благо, изучите предметную область.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37199398
авторh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoавторhXDiaBLo, язык хотя бы назвал

Используй библиотечные решения типа XmlWriter( http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx ) в .NET'е или xml.dom.minidom в python
( http://www.postneo.com/projects/pyxml/ ).
Да мне бы общие идеи. Но вообще, С++ Билдер. Пока обходился без всяких либ, генерил чисто со всякими if в обычную строку. Т.к. никогда не было времени взять и всерьёз что-нибудь изучить перед разработкой, сразу бац, и задание, чтобы через пару дней всё было готово, любой ценой.

Если хочешь ваять велосипед, RAII спасут от многих головных болей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
std::string generate()
{
  SquareWheelXmlNode root("root");
  SquareWheelXmlNode& child = root.addChild("child");
  child["attr"]="value";
  for(int i =  0 ; i <  10 ; ++i){
        SquareWheelXmlNode& child2 = child.addChild("child2", child);
        if(rand()% 2 ){
            child2[make_random_attr_name()] = "hello";
            child[make_random_attr_name()] = "world";
        }
  }
  return root.asString();
}
конструктор, деструктор, op[], asString() сам придумаешь.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37199413
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BpeguHСо всем уважением, судя по over 16k сообщений и горке тем ни о чем, таки время попи*деть у Вас есть. Используйте его во благо, изучите предметную область.
Знаете, при всём уважении, если дёргают постоянно на какую-то фигню, то сосредоточиться на изучении чего-либо крайне сложно. Поэтому остаётся сидеть на форуме и болтать ни о чём. А когда появляется куча свободного времени, я таки исчезаю отсюда, и изучаю полезные штуки. А вы за других не думайте, есть у них время на что-либо, или нет.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37199431
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторhXDiaBLoпропущено...

Да мне бы общие идеи. Но вообще, С++ Билдер. Пока обходился без всяких либ, генерил чисто со всякими if в обычную строку. Т.к. никогда не было времени взять и всерьёз что-нибудь изучить перед разработкой, сразу бац, и задание, чтобы через пару дней всё было готово, любой ценой.

Если хочешь ваять велосипед, RAII спасут от многих головных болей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
std::string generate()
{
  SquareWheelXmlNode root("root");
  SquareWheelXmlNode& child = root.addChild("child");
  child["attr"]="value";
  for(int i =  0 ; i <  10 ; ++i){
        SquareWheelXmlNode& child2 = child.addChild("child2", child);
        if(rand()% 2 ){
            child2[make_random_attr_name()] = "hello";
            child[make_random_attr_name()] = "world";
        }
  }
  return root.asString();
}
конструктор, деструктор, op[], asString() сам придумаешь.
Хмм, вот это кстати тоже не очень читабельно. У меня появилась идея. Разбить все случаи, на более менее чёткие абстракции, сделать по ним классы, которые будут генерить хмл по всем этим случаям, ну там по методам всё распихать, и чтобы классы можно было друг-другу подэлементами делать, и посмотрю что получится. Возможно это будет немного похоже на велосипед, но надеюсь будет читабельно, и заточено конкретно для моих приложений, чтобы поддержку упростить, и введение новых элементов. Потом отпишусь, если интересное что-то получится.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37200034
newman1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как раз сейчас решал такую задачу. Берется xsd схема. По ней генерится интерфейсный модуль. В delphi для этого есть встроенные стредства. В интерфейсном модуле уже все разложено по полочкам. Создал экземпляры, заполнил коллекции и готово.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37200044
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
newman1976Как раз сейчас решал такую задачу. Берется xsd схема. По ней генерится интерфейсный модуль. В delphi для этого есть встроенные стредства. В интерфейсном модуле уже все разложено по полочкам. Создал экземпляры, заполнил коллекции и готово.
В Дельфи это с какой версии появилось? Модуль как-то называется, или встроен в среду? В Билдере 6 такого поди нет.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37200275
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoУ меня есть несколько программ, в которых я генерю XML. Когда более менее простой случай, там всё выглядит прилично. Но когда куча ветвлений и условий, и результирующий XML выходит очень разный, при разных стартовых условиях, то получаются такие дебри, что почти невозможно понять что и откуда растёт, и поддержка становится затруднительной. Сейчас мне нужно написать очередной модуль выгрузки XML, для очередной программы. Хочу на этот раз по умному сделать, и чтобы не возникало потом ошибок, типа незакрытых тегов, после чего фиг найдёшь, где я это забыл вставить. Есть ли какие-то статьи, книги или советы по этому поводу?

Юзай Visual Studio там всё для этого есть.

Хотя даже не обязательно, Delphi для NET точно есть, наверно и билдер NET поддерживает.

XElement с поддержкой LINQ самый идеальный вариант для раковыривания XML.
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=RU-RU&k=k(SYSTEM.XML.LINQ.XELEMENT);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-VB)&rd=true
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37200282
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Multy,
.NET не предлагать. В плане подобных фреймворков, я есмь религиозный фанатик Явы.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37200669
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoMulty,
.NET не предлагать. В плане подобных фреймворков, я есмь религиозный фанатик Явы.

Тогда и езжай на свою яву, флаг ф руки...
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37200682
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MultyXDiaBLoMulty,
.NET не предлагать. В плане подобных фреймворков, я есмь религиозный фанатик Явы.

Тогда и езжай на свою яву, флаг ф руки...

Ты бы хоть прочитал внимательно чего ТС-у надо.
Он ГЕНЕРИТЬ XML собирается, а ты ему Linq :(
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37200796
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Multyпропущено...


Тогда и езжай на свою яву, флаг ф руки...

Ты бы хоть прочитал внимательно чего ТС-у надо.
Он ГЕНЕРИТЬ XML собирается, а ты ему Linq :(

XElement - может великолепно генерить XML. Лучший в свойм роде, за минимальное количество кода. Впрочем ему это не пригодицца.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37200895
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MultyXElement - может великолепно генерить XML. Лучший в свойм роде, за минимальное количество кода. Впрочем ему это не пригодицца.

зацени
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Person joe =  new  Person("Joe", "Walnes");
joe.setPhone( new  PhoneNumber( 123 , "1234-456"));
joe.setFax( new  PhoneNumber( 123 , "9999-999"));

XStream xstream =  new  XStream( new  DomDriver());
xstream.alias("person", Person. class );
xstream.alias("phonenumber", PhoneNumber. class );
String xml = xstream.toXML(joe);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code> 123 </code>
    <number> 1234 - 456 </number>
  </phone>
  <fax>
    <code> 123 </code>
    <number> 9999 - 999 </number>
  </fax>
</person>

зарисовать как тоже самое будет выглядеть с XElement? а если увеличить кол-во классов и свойств?

П.С.
сначала узнай мир побольше, а потом начинай сравнивать.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201011
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть создать класс в нужной структуре, и его сериализовать
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201054
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaMultyXElement - может великолепно генерить XML. Лучший в свойм роде, за минимальное количество кода. Впрочем ему это не пригодицца.

зацени
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Person joe =  new  Person("Joe", "Walnes");
joe.setPhone( new  PhoneNumber( 123 , "1234-456"));
joe.setFax( new  PhoneNumber( 123 , "9999-999"));

XStream xstream =  new  XStream( new  DomDriver());
xstream.alias("person", Person. class );
xstream.alias("phonenumber", PhoneNumber. class );
String xml = xstream.toXML(joe);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 <Person>
  <firstname>Joe</firstname> 
  <lastname>Walnes</lastname> 
  <Phone>
  <code> 123 </code> 
  <Number> 1234 - 456 </Number> 
  </Phone>
  <Fax>
  <code> 123 </code> 
  <Number> 9999 - 999 </Number> 
  </Fax>
  </Person>

зарисовать как тоже самое будет выглядеть с XElement? а если увеличить кол-во классов и свойств?


Что за желание письками мерецца?
Что там за класс Person в Java? Специальный что-ли? Мне специальных классов не нужно.

Не знаю как ты будешь делать, я буду так:

Код: plaintext
1.
2.
3.
4.
Dim XElement As New XElement("Person", New XElement("firstname", "Joe"),
                                 New XElement("lastname", "Walnes"),
                                 New XElement("Phone", New XElement("code", "123"), New XElement("Number", "1234-456")),
                                 New XElement("Fax", New XElement("code", "123"), New XElement("Number", "9999-999"))
                                 )
или так:
Код: plaintext
1.
2.
3.
4.
Dim XElement1 As New XElement("Person")
    XElement1.Add(New XElement("firstname", "Joe"))
    XElement1.Add(New XElement("lastname", "Walnes"))
    XElement1.Add(New XElement("Phone", New XElement("code", "123"), New XElement("Number", "1234-456")))
    XElement1.Add(New XElement("Fax", New XElement("code", "123"), New XElement("Number", "9999-999")))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code> 123 </code>
    <number> 1234 - 456 </number>
  </phone>
  <fax>
    <code> 123 </code>
    <number> 9999 - 999 </number>
  </fax>
</person>

Результат тот же, кода меньше и он абсолютно универсален. Не говоря уже про все остальные навороты XElement в том числе LINQ.
Так что езжай на Javu
chpashaсначала узнай мир побольше, а потом начинай сравнивать.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201115
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MultyЧто там за класс Person в Java? Специальный что-ли?
самый обыкновенный, прикинь?

MultyНе знаю как ты будешь делать, я буду так:

Код: plaintext
1.
2.
3.
4.
Dim XElement As New XElement("Person", New XElement("firstname", "Joe"),
                                 New XElement("lastname", "Walnes"),
                                 New XElement("Phone", New XElement("code", "123"), New XElement("Number", "1234-456")),
                                 New XElement("Fax", New XElement("code", "123"), New XElement("Number", "9999-999"))
                                 )

а теперь сравни это с моим примером, и расскажи еще раз про самый чудесный в мире класс.

MultyРезультат тот же, кода меньше и он абсолютно универсален.
т.е. ты реально не видишь разницы между полностью автоматической сериализацией и набиванием руками?

Код: plaintext
1.
2.
3.
4.
XStream xstream =  new  XStream( new  DomDriver());
xstream.alias("person", Person. class );
xstream.alias("phonenumber", PhoneNumber. class );
String xml = xstream.toXML(joe);

т.е. до тебя реально не доходит, что если в классе 30 полей, то мой кода не увеличится ни на строчку а твой займет два листа A4?



MultyТак что езжай на Javu

папе будешь грубить, если он у тебя есть
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201152
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaMultyЧто там за класс Person в Java? Специальный что-ли?
самый обыкновенный, прикинь?


Т.е. это како-то готовый клас?

И даже в этос случае у тебя 7 сточек, а у меня 5.

В NET тоже можно сделать такой класс, а потом сериализовать в XML одной строчкой.

Показывать не буду, т.к. не смысла тебе что-то доказывать.

Для тебя нет ничего кроме любимой и неповторимой Java.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201283
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Multychpashaпропущено...
самый обыкновенный, прикинь?


Т.е. это како-то готовый клас?
не как-то готовый, а самый обыкновенный класс. свойства и больше ничего.

MultyИ даже в этос случае у тебя 7 сточек, а у меня 5.
а что в одну строку не влезло? а если к классу Person добавить свойства birthDate и id, то сколько у тебя строчек добавится? а у меня?

MultyВ NET тоже можно сделать такой класс, а потом сериализовать в XML одной строчкой.
какой такой?

MultyПоказывать не буду
не проходили еще?

MultyДля тебя нет ничего кроме любимой и неповторимой Java.
ты со мной лично знаком?
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201477
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaMultyПоказывать не буду
не проходили еще?


Я то проходил, а вот ты прохол что-то кроме фанатичной любви к Java.

Впрочем больше спорить с тобой не буду, иди лучше голову полечи...
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201504
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я написал велосипед:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
#ifndef __AK_XML_PLUS_PLUS_H_
#define __AK_XML_PLUS_PLUS_H_

#include <vector>
#include <map>
#define TIXML_USE_STL
#include <tinyxml.h>
struct CXmlValue
{
 std::string value;
 CXmlValue& operator=(const std::string& vl)
 {
  value=vl;
  return *this;
 }
 CXmlValue& operator=(const CXmlValue& v)
 {
  value=v.value;
  return *this;
 }
 CXmlValue& operator=(const int vl)
 {
  value=intToStr(vl);
  return *this;
 }
 string operator()()
 {
  return value;
 }
};

class CXmlKey
{
 protected:
  CXmlKey* parent;
  CXmlKey(){parent=NULL;};
  std::map<std::string,CXmlValue>values;
  std::string xmlString(const std::string& s)
  {
   std::string ret="";
   for (std::size_t i= 0 ;i<s.length();i++)
    if (s[i]=='\"')ret+=""";else
    if (s[i]=='&')ret+="&";else
    ret+=s[i];
   return ret;
  }
 public:
  int sizeOf(const std::string& nm)
  {
   int cnt=0;
   for (std::size_t i=0;i<childs.size();i++)
    if (childs[i]->name==nm)cnt++;
   return cnt;
  }
  int length()
  {
   if (parent==NULL)return 1;
   int cnt=0;
   for (std::size_t i=0;i<parent->childs.size();i++)
    if (parent->childs[i]->name==name)cnt++;
   return cnt;
  }
  void loadFromXmlElement(TiXmlElement* root)
  {
   TiXmlElement* child;
   for (child = (TiXmlElement*)root->FirstChild(); child!= NULL; child = (TiXmlElement*)child->NextSibling())
   {
    if (child->Type()==TiXmlNode::ELEMENT)
    {
     CXmlKey* key=new CXmlKey(this,child->Value());
     childs.push_back(key);
     key->loadFromXmlElement(child);
    }else
    if (child->Type()==TiXmlNode::TEXT)
     value=child->Value();
   }
   TiXmlAttribute* atr;
   for (atr = root->FirstAttribute(); atr!= NULL; atr = atr->Next())
   {
    std::string nm=atr->Name();
    std::string vl=atr->Value();
    values[nm]=vl;
   }
  }
  std::vector<CXmlKey*>childs;
  std::string name;
  std::string value;
  CXmlKey(CXmlKey*p, const std::string& nm)
  {
   parent=p;
   name=nm;
  }
  std::string fullName()
  {
   if (parent!=NULL)return parent->fullName()+"."+name;
   return name;
  }
  CXmlKey& operator[](const int idx)
  {  
   if (parent==NULL && idx==0)return *this;
   if (parent==NULL)string_throw("Array access to root element!");
   int ci=0;
   for (std::size_t i=0;i<parent->childs.size();i++)
    if (parent->childs[i]->name==name)
    {
     if (ci==idx)return *parent->childs[i];
     ci++;
    }
   if (ci==idx)
   {
    parent->childs.push_back(new CXmlKey(parent,name));
    return *parent->childs[parent->childs.size()-1];
   }
   string_throw(fullName()+"["+intToStr(idx)+"] index out of bound!");
   return *this;
  }
  CXmlKey& operator[](const std::string& nm)
  {  
   for (std::size_t i=0;i<childs.size();i++)
    if (childs[i]->name==nm)
     return *childs[i];
   childs.push_back(new CXmlKey(this,nm));
   return *childs[childs.size()-1];
  }
  std::string toXMLString(const std::string& tab="")
  {
   std::string vals=" ";
   std::map<string,CXmlValue>::iterator it;
   for (it=values.begin();it!=values.end();it++)
    vals=vals+it->first+"=\""+xmlString(it->second())+"\" ";
   if (vals==" ")vals="";
   std::string ret;
   if (value=="" && childs.size()==0)
    return tab+"<"+name+vals+"/>\n";else
    ret=tab+"<"+name+vals+">\n";
   if (value!="")
    ret=ret+tab+" "+value+"\n";
   for (std::size_t i=0;i<childs.size();i++)
    ret=ret+childs[i]->toXMLString(tab+" ");
   ret=ret+tab+"</"+name+">\n";
   return ret;
  }
  void operator=(const std::string& val)
  {
   value=val;
  }
  CXmlValue& operator()(const std::string& vn)
  {
   return values[vn];
  }
  /*string operator()(const std::string& vn)
  {
   return values[vn]();
  }*/
};

class CXmlDocument:public CXmlKey
{
 protected:
 public:
  CXmlDocument():CXmlKey(NULL,"root")
  {
   
  }
  CXmlDocument(const std::string& fn):CXmlKey(NULL,"root")
  {
   loadFromFile(fn);
  }
  void loadFromFile(const std::string& fn)
  {
   TiXmlDocument doc;
   doc.LoadFile(fn.c_str());
   TiXmlElement* root=doc.RootElement();
   name=root->Value();
   loadFromXmlElement(root);
  }
  void loadFromString(const std::string& data)
  {
   TiXmlDocument doc;
   doc.Parse(data.c_str());
   TiXmlElement* root=doc.RootElement();
   name=root->Value();
   loadFromXmlElement(root);
  }
};

#endif

использую примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 CXmlDocument xml;
 xml["record"][ 0 ]("field")= 123 ;
 xml["record"][ 0 ]("string")="Всякий текст";
 xml["record"][ 1 ]["test"][ 0 ]("value")= 0 ;
 xml["record"][ 1 ]["test"][ 1 ]("value")= 1 ;
 xml["record"][ 1 ]["test"][ 2 ]("value")= 2 ;
 printf("%s\n",xml.toXMLString().c_str());
результат:<root>
<record field="123" string="Всякий текст" />
<record>
<test value="0" />
<test value="1" />
<test value="2" />
</record>
</root>

но насчет скорости и эффективности тут большие сомнения у меня.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201505
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MultyXDiaBLoMulty,
.NET не предлагать. В плане подобных фреймворков, я есмь религиозный фанатик Явы.

Тогда и езжай на свою яву, флаг ф руки...
:) Я пишу на C++, Java, ActionScript, PL/SQL. Не вам мне указывать.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201508
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaMultyXElement - может великолепно генерить XML. Лучший в свойм роде, за минимальное количество кода. Впрочем ему это не пригодицца.

зацени
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Person joe =  new  Person("Joe", "Walnes");
joe.setPhone( new  PhoneNumber( 123 , "1234-456"));
joe.setFax( new  PhoneNumber( 123 , "9999-999"));

XStream xstream =  new  XStream( new  DomDriver());
xstream.alias("person", Person. class );
xstream.alias("phonenumber", PhoneNumber. class );
String xml = xstream.toXML(joe);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code> 123 </code>
    <number> 1234 - 456 </number>
  </phone>
  <fax>
    <code> 123 </code>
    <number> 9999 - 999 </number>
  </fax>
</person>

зарисовать как тоже самое будет выглядеть с XElement? а если увеличить кол-во классов и свойств?

П.С.
сначала узнай мир побольше, а потом начинай сравнивать.
Вот нечто в этом роде я и думаю сделать. Только слегка по другому.
...
Рейтинг: 0 / 0
XML - как его генерировать по умному?
    #37201866
newman1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XDiaBLonewman1976Как раз сейчас решал такую задачу. Берется xsd схема. По ней генерится интерфейсный модуль. В delphi для этого есть встроенные стредства. В интерфейсном модуле уже все разложено по полочкам. Создал экземпляры, заполнил коллекции и готово.
В Дельфи это с какой версии появилось? Модуль как-то называется, или встроен в среду? В Билдере 6 такого поди нет.
Я в D2010 делал. Но и в D7 это есть. Тут: File-New-Other-New-XML-(XML Data Binding)
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / XML - как его генерировать по умному?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]