Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2015, 12:53   #1
Maxjuvefan
Пользователь
 
Регистрация: 24.08.2015
Сообщений: 46
По умолчанию Создание в Delphi 2010 xml файла нужного формата

Ребят, столкнулся с такой проблемой - как создать в Delphi 2010 xml файл, чтобы был один корневой тег, в котором есть несколько переменных? Значения переменных будут браться из БД на SQL.

Нужно, чтобы xml файл выглядел таким образом:

<?xml version="1.0" encoding="utf-16"?>
<AssignmentQR text00_Вид="Документ" text01_Начальник="Начальник отдела ИТ" text02_фио="Иванов А.В." />

Именно такой формат нужен, чтобы созданные xml файлы открывались через другую программу и обрабатывались там.

Пробую сделать через AddChild, но оно создает много тегов, а нужно, чтобы все было в одном.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Xml: IXMLDocument;
begin
  // создаем
  Xml := TXMLDocument.Create (nil);
  Xml.Active := true;
// создаем
  with Xml do
    begin
      // создаем корневой узел
      with AddChild ('AssignmentQR') do
        begin
       // дочерние элементы
            ChildValues ['text02_фио'] := '=" Иванов  А.В."';
            ChildValues ['text01_Начальник'] := '="Начальник отдела ИТ"';
            ChildValues ['text00_Вид'] := '="Документ"';
        end;  // with
    end;  // with: создаем
Xml.SaveToFile ('D:\44.xml');
end;
Пробую сделать через Add, возникает проблема длины строки, нужная строка больше 255 символов (textN много). Файл получается, но через браузер не отрывается.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Xml: TStringList;
begin
   // создаем объект
   Xml := TStringList. Create;
   // формируем документ
   Xml. Add ('<?xml version="1.0" encoding="UTF-16"?>');
   Xml. Add ('< AssignmentQR text00_Вид="Документ" text01_Начальник="Начальник отдела ИТ" text02_фио="Иванов А.В."/>');
   // записываем
   Xml. SaveToFile ('D:\333333.xml');
   // освобождаем память
   FreeAndNil (Xml);
end;
Помогите, кто чем может.

Последний раз редактировалось Stilet; 21.12.2015 в 14:07.
Maxjuvefan вне форума Ответить с цитированием
Старый 21.12.2015, 13:20   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это атрибуты. См. Attributes. Уверен, что кириллические названия прокатят?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.12.2015, 21:07   #3
winnt32
 
Аватар для winnt32
 
Регистрация: 06.05.2011
Сообщений: 5
По умолчанию

Здравствуйте!
Подскажите как при работе с xml делать так, чтобы новый элемент добавлялся с новой строки, а не в одну строчку. Например чтобы файл формировался так:
<Person>
<id></id>
<Family></Family>
<Name></Name>
</Person>
А не так:
<Person><id></id><Family></Family><Name></Name></Person>
winnt32 вне форума Ответить с цитированием
Старый 21.12.2015, 21:11   #4
winnt32
 
Аватар для winnt32
 
Регистрация: 06.05.2011
Сообщений: 5
По умолчанию

Использую функцию
function SaveNews(Family,Name,:string; id:integer) : Boolean;
var i : integer;
Node,ValNode : IXMLNode;
F:textFile;
begin
result:=true;
XMLDoc.Active:=true;
for i := 0 to XMLDoc.DocumentElement.ChildNodes.C ount - 1 do begin
Node := XMLDoc.DocumentElement.ChildNodes[i];
if StrToInt(Node.ChildNodes['id'].Text)=id then begin
Result:=false;
Exit;
end;
end;

Node:=XMLDoc.DocumentElement.AddChi ld('Person');
Node.Attributes['birthday']:=DateToStr(birthday);
ValNode:=Node.AddChild('id');
ValNode.Text:=IntToStr(id);
ValNode:=Node.AddChild('Family');
ValNode.Text:=Family;
ValNode:=Node.AddChild('Name');
ValNode.Text:=Name;
XMLDoc.SaveToFile(XMLDoc.FileName);
end;
winnt32 вне форума Ответить с цитированием
Старый 21.12.2015, 21:31   #5
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Какая разница? xml-ю все равно как
Да и смотря чем смотреть файл
come-on вне форума Ответить с цитированием
Старый 21.12.2015, 21:35   #6
winnt32
 
Аватар для winnt32
 
Регистрация: 06.05.2011
Сообщений: 5
По умолчанию

Просто для удобства. Все итак в принципе работает как надо, но когда открываешь все без прорамы глаз режет
winnt32 вне форума Ответить с цитированием
Старый 21.12.2015, 21:38   #7
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

открывайте в браузере, не будет резать
come-on вне форума Ответить с цитированием
Старый 21.12.2015, 21:46   #8
winnt32
 
Аватар для winnt32
 
Регистрация: 06.05.2011
Сообщений: 5
По умолчанию

Еслиу кого-нибудь есть варианты, я бы все таки посмотрел! Заранее спасибо.
winnt32 вне форума Ответить с цитированием
Старый 22.12.2015, 16:21   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

http://docwiki.embarcadero.com/CodeE...r_%28Delphi%29
phomm вне форума Ответить с цитированием
Старый 23.12.2015, 13:17   #10
winnt32
 
Аватар для winnt32
 
Регистрация: 06.05.2011
Сообщений: 5
По умолчанию

Спасибо! Всего лишь то одну опцию нужно подправить!
XMLDoc.Options := XMLDoc.Options + [doNodeAutoIndent];
winnt32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание XML файла из выгруженных данных Alchi09 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 23.08.2014 20:51
Поиск нужного места в XML и добавление в него нового элемента / LINQ ganeevez C# (си шарп) 3 26.03.2014 15:52
Выбор нужного значения по нескольким критериям Excel 2010 dg'uyd Microsoft Office Excel 2 22.03.2012 11:32
Как с файла XML картинки из формата svg , разобрать этот файл и вывести на форму djKeysi C# (си шарп) 2 08.12.2011 12:36
XML формата и Delphi S_Yevgeniy Общие вопросы Delphi 2 02.09.2009 11:35