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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 15:41   #1
IzIFRag
Пользователь
 
Аватар для IzIFRag
 
Регистрация: 05.05.2010
Сообщений: 15
По умолчанию Из XML в Delphi

Здравствуйте. У меня следующая проблема: нужно из документа формата xml взять n столбцов длинною m строк, при этом они стоят не рядом и отослать на печать. Как через делфи работать с этим документом ? пробежался по форуму, не нашел чего либо подходящего. Жду советов, или ссылок на faq. Заранее спасибо.

Последний раз редактировалось IzIFRag; 29.07.2010 в 16:01.
IzIFRag вне форума Ответить с цитированием
Старый 29.07.2010, 15:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
документа формата xml
Но это не совсем экзеловский формат. Может ты имел ввиду xls?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2010, 15:57   #3
IzIFRag
Пользователь
 
Аватар для IzIFRag
 
Регистрация: 05.05.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Но это не совсем экзеловский формат. Может ты имел ввиду xls?
Блин точно, не заметил, просто он открыт в excele, вот и написал на автомате. Нет, именно xml.
IzIFRag вне форума Ответить с цитированием
Старый 30.07.2010, 10:55   #4
IzIFRag
Пользователь
 
Аватар для IzIFRag
 
Регистрация: 05.05.2010
Сообщений: 15
По умолчанию

Документ в виде таблицы, я пробую открыть его как файл базы данных. Использую ClientDataSet. При попытке изменить Activate c False на True выдает mismatch in datapacket. Я чего то не понимаю... как его открытью. может через какой нить другой компонент из ADO ? Подскажите плиз.
IzIFRag вне форума Ответить с цитированием
Старый 01.08.2010, 16:59   #5
IzIFRag
Пользователь
 
Аватар для IzIFRag
 
Регистрация: 05.05.2010
Сообщений: 15
По умолчанию

ставлю на форму ClientDataSet1 указываю в имени файла файл xml и и делаю его активным. Выдается ошибка:
Mismatch in datapacket. В файле много строк и столбцов, как я понял ClientDataSet просто не сможет открыть его... Как обойти это ?
IzIFRag вне форума Ответить с цитированием
Старый 02.08.2010, 09:24   #6
IzIFRag
Пользователь
 
Аватар для IzIFRag
 
Регистрация: 05.05.2010
Сообщений: 15
По умолчанию

Вот нашел пример, на форме лежит Button1 и XMLDocument1.
Этот код копирует целиком xml документ из 22 в 2222:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    XMLDocument1: TXMLDocument;
    procedure Button1Click(Sender: TObject);
    procedure ReadNodInfo(XmlNode:ixmlnode);
     private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
var
   i:integer;
begin
 XMLDocument1.FileName:='C:22.xml';
 XMLDocument1.Active:=true;
  for i:=0 to XMLDocument1.ChildNodes.Count-1 do
    begin
      ReadNodInfo(XMLDocument1.Node.ChildNodes.Get(i));
    end;
 XMLDocument1.SaveToFile('C:2222.xml');
end;

procedure TForm1.ReadNodInfo(XmlNode:ixmlnode);
var
   CurNod:ixmlnode;
   CountNod, CountChild : integer;
   NameNode, ValueNode, temp: WideString;

begin
       temp:=XmlNode.XML;
       if XmlNode.ChildNodes.Count > 1 then
           begin
            for CountChild:=0 to XmlNode.ChildNodes.Count-1 do
               begin

                  temp:=XmlNode.XML;
                  ReadNodInfo(XmlNode.ChildNodes.Get(CountChild));
               end;
           end
         else
           begin
            NameNode:=XmlNode.NodeName;
            if XmlNode.IsTextElement then
              begin
                ValueNode:=XmlNode.NodeValue;
                ShowMessage(NameNode+' '+ValueNode);
              end
           end;
end;



end.
Подскажите пожалуйста, как здесь обращаться к конкретным ячейкам, чтобы копировать только заданные столбцы/строки.
IzIFRag вне форума Ответить с цитированием
Старый 02.08.2010, 16:06   #7
IzIFRag
Пользователь
 
Аватар для IzIFRag
 
Регистрация: 05.05.2010
Сообщений: 15
По умолчанию

Вот нашел пример, на форме лежит Button1 и XMLDocument1.
Этот код копирует целиком xml документ из 22 в 2222:
Код:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    XMLDocument1: TXMLDocument;
    procedure Button1Click(Sender: TObject);
    procedure ReadNodInfo(XmlNode:ixmlnode);
     private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
var
   i:integer;
begin
 XMLDocument1.FileName:='C:22.xml';
 XMLDocument1.Active:=true;
  for i:=0 to XMLDocument1.ChildNodes.Count-1 do
    begin
      ReadNodInfo(XMLDocument1.Node.ChildNodes.Get(i));
    end;
 XMLDocument1.SaveToFile('C:2222.xml');
end;

procedure TForm1.ReadNodInfo(XmlNode:ixmlnode);
var
   CurNod:ixmlnode;
   CountNod, CountChild : integer;
   NameNode, ValueNode, temp: WideString;

begin
       temp:=XmlNode.XML;
       if XmlNode.ChildNodes.Count > 1 then
           begin
            for CountChild:=0 to XmlNode.ChildNodes.Count-1 do
               begin

                  temp:=XmlNode.XML;
                  ReadNodInfo(XmlNode.ChildNodes.Get(CountChild));
               end;
           end
         else
           begin
            NameNode:=XmlNode.NodeName;
            if XmlNode.IsTextElement then
              begin
                ValueNode:=XmlNode.NodeValue;
                ShowMessage(NameNode+' '+ValueNode);
              end
           end;
end;



end.
Подскажите пожалуйста, как здесь обращаться к конкретным ячейкам, чтобы копировать только заданные столбцы/строки.
Добавил сам файл xml.
IzIFRag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с XML в Delphi.. Ele Помощь студентам 2 29.05.2010 15:03
XML в Delphi 7 Mutagena Общие вопросы Delphi 17 09.10.2009 16:29
XML (Delphi) VadEr Помощь студентам 11 23.06.2009 23:32
xml в delphi /Arven/ Компоненты Delphi 0 23.04.2008 22:47
Xml и Delphi KlErik Общие вопросы Delphi 2 14.05.2007 09:54