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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2014, 18:43   #21
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо, но мне бы касаемо NativeXML...
Arkuz вне форума Ответить с цитированием
Старый 14.04.2014, 18:56   #22
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Я вам дал пример. Показывайте свои наработки, у вас вообще видимо нет.
Человек_Борща вне форума Ответить с цитированием
Старый 14.04.2014, 20:15   #23
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Я вам дал пример. Показывайте свои наработки, у вас вообще видимо нет.
Да, нет. На открытие и обработку ничего нет. Не совсем пойму как обойти весь файл. Как проверить наличие тегов и т.п.

Пользуясь Вашими примерами получаю вот это:
xml:
Код:
<?xml version="1.0" encoding="utf-8"?>
<DSHO_REGISTRY>
	<HEADER>
		<DATE>01.04.2014</DATE>
	</HEADER>
	<PATIENT>
		<CODE>11</CODE>
		<START_DATE>14.04.2014</START_DATE>
		<POLIS>1</POLIS>
		<FAMILY>1</FAMILY>
		<F_NAME>1</F_NAME>
		<L_NAME>1</L_NAME>
		<BIRTH_DATE>14.04.2014</BIRTH_DATE>
		<END_DATE/>
	</PATIENT>	
</DSHO_REGISTRY>
код:
Код:
 
  xml:= TNativeXml.Create(nil);
  xml.LoadFromFile(OpenDialog1.FileName);
  Memo1.Clear;
  for i:= 0 to xml.Root.NodeCount-1 do
  begin
   Memo1.Lines.Add(xml.Root.Nodes[i].Name);
  end;
результат:
Код:
WhiteSpace
HEADER
WhiteSpace
PATIENT
WhiteSpace
Arkuz вне форума Ответить с цитированием
Старый 14.04.2014, 20:35   #24
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Пробовал вот так:
Код:
 for i:= 0 to xml.Root.NodeCount-1 do
  begin
   if xml.Root.Nodes[i].Name='PATIENT'
   then
   begin
     Memo1.Lines.Add(xml.Root.FindNode('CODE').Value);
     Memo1.Lines.Add(xml.Root.FindNode('START_DATE').Value);
     Memo1.Lines.Add(xml.Root.FindNode('POLIS').Value);
     Memo1.Lines.Add(xml.Root.FindNode('FAMILY').Value);
   end;
  end;
результат:
Код:
1
11.04.2014
1
1
1
11.04.2014
1
1
файл:
Код:
<?xml version="1.0" encoding="utf-8"?>
<DSHO_REGISTRY>
	<HEADER>
		<NAME_MO>алекс</NAME_MO>
		<DATE>01.04.2014</DATE>
	</HEADER>
	<PATIENT>
		<CODE>1</CODE>
		<START_DATE>11.04.2014</START_DATE>
		<POLIS>1</POLIS>
		<FAMILY>1</FAMILY>
		<F_NAME>1</F_NAME>
		<L_NAME>1</L_NAME>
		<BIRTH_DATE>14.04.2014</BIRTH_DATE>
		<END_DATE/>
	</PATIENT>
	<PATIENT>
		<CODE>2</CODE>
		<START_DATE>12.04.2014</START_DATE>
		<POLIS>2</POLIS>
		<FAMILY>2</FAMILY>
		<F_NAME>1</F_NAME>
		<L_NAME>1</L_NAME>
		<BIRTH_DATE>14.04.2014</BIRTH_DATE>
		<END_DATE/>
	</PATIENT>
</DSHO_REGISTRY>
Не пойму как работать...
Arkuz вне форума Ответить с цитированием
Старый 14.04.2014, 22:36   #25
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Как-то так...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Xml: TNativeXml;
  Item: TXmlNode;
begin
  Xml := TNativeXml.CreateName('DSHO_REGISTRY');
  try
    Xml.LoadFromFile('lol4to');
    for i := 0 to Xml.Root.NodeCount - 1 do
    begin
      Item := Xml.Root.Nodes[i];
      if (Item.NameUnicode = 'HEADER') then
      begin
        // Читаем HEADER
      end;

      if (Item.NameUnicode = 'PATIENT') then
      begin
        // Читаем PATIENT
      end;

    end;
  finally
    FreeAndNil(Xml);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  ccXml: CoDOMDocument;
  Xml: IXMLDOMDocument;
  xmlHeader: IXMLDOMNode;
  xmlPatients: IXMLDOMNodeList;

begin
  Xml := ccXml.Create;
  Xml.load('data.xml');
  xmlHeader := Xml.documentElement.selectSingleNode('//DSHO_REGISTRY/HEADER');
  if Assigned(xmlHeader) then
  begin
    { Читаем HEADER }
  end;
  xmlPatients := Xml.documentElement.selectNodes('//DSHO_REGISTRY/PATIENT');
  if Assigned(xmlPatients) then
  begin
    for i:=0 to xmlPatients.length -1 do
    begin
      { Читаем PATIENTов }
    end;
  end;
end;
Пример NativeXML и MS XML с использованием XPath.
Человек_Борща вне форума Ответить с цитированием
Старый 17.04.2014, 16:02   #26
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо за помощь. Вот что получилось.

Код:
function XMLToSG(xml:TNativeXml; SG:TStringGrid):boolean;
var
  i,j,k:integer;
  Item: TXmlNode;
begin
  try
  k:=0;
  for i := 0 to Xml.Root.NodeCount - 1 do
    begin
      Item := Xml.Root.Nodes[i];
      if (Item.NameUnicode = 'HEADER') then
        for j:=0 to Item.ElementCount-1 do
        begin
         if (Item.Elements[j].NameUnicode='NAME_MO')
           then MainForm.NameORGEdit.Text:=Item.Elements[j].Value;
         if (Item.Elements[j].NameUnicode='DATE')
           then MainForm.ReestrDateTimePicker.Date:=StrToDate(Item.Elements[j].Value);
         end;
      if (Item.NameUnicode = 'PATIENT') then
      begin
       inc(k);
       SG.RowCount:=SG.RowCount+1;
       for j:=0 to Item.ElementCount-1 do
       begin
         if (Item.Elements[j].NameUnicode='CODE')
           then SG.Cells[j,k]:=Item.Elements[j].Value;
         if (Item.Elements[j].NameUnicode='START_DATE')
           then SG.Cells[j,k]:=Item.Elements[j].Value;
         if (Item.Elements[j].NameUnicode='POLIS')
           then SG.Cells[j,k]:=Item.Elements[j].Value;
         if (Item.Elements[j].NameUnicode='FAMILY')
           then SG.Cells[j,k]:=Item.Elements[j].Value;
         if (Item.Elements[j].NameUnicode='F_NAME')
           then SG.Cells[j,k]:=Item.Elements[j].Value;
         if (Item.Elements[j].NameUnicode='L_NAME')
           then SG.Cells[j,k]:=Item.Elements[j].Value;
         if (Item.Elements[j].NameUnicode='BIRTH_DATE')
           then SG.Cells[j,k]:=Item.Elements[j].Value;
         if (Item.Elements[j].NameUnicode='END_DATE')
           then SG.Cells[j,k]:=Item.Elements[j].Value;
       end;
      end;
    end;
  finally
   FreeAndNil;
  end;
end;
Arkuz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
посоветуйте бесплатный парсер товаров GoldSteals Софт 2 27.03.2013 00:15
Парсер XMl в Delphi RusExcellent Помощь студентам 2 16.11.2011 11:44
Парсер XML savva Общие вопросы по Java, Java SE, Kotlin 7 02.10.2011 23:11
Посоветуйте парсер kml и igc на С AntZero Общие вопросы C/C++ 1 01.08.2011 01:27
парсер XML, не видит XML тэги supercelt PHP 3 02.11.2009 19:18