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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2014, 12:33   #11
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

см. эту статью DelphiHTMLParsers или этот компонент HTML DOM Parser

или этот компонент JvHTMLParser (JEDI), смотрите пример JvHTMLParser Demo

и вот какой-то Parse Easynet
beegl вне форума Ответить с цитированием
Старый 13.04.2014, 16:22   #12
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вы точно уверены что XML и HTML это одно и тоже?

Не знаете, то лучше идите дальше
Человек_Борща вне форума Ответить с цитированием
Старый 13.04.2014, 23:23   #13
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

Цитата:
Вы точно уверены что XML и HTML это одно и тоже?
Не одно и то же, но однозначно HTML парсеры без проблем разбирают простой XML
XE5 вне форума Ответить с цитированием
Старый 14.04.2014, 00:03   #14
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а бывает не простой XML ?
eval вне форума Ответить с цитированием
Старый 14.04.2014, 00:48   #15
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
а бывает не простой XML ?
Бывает гибрид XHTML. Бывает нечто на основе XHTML + XSL + HTML.

HTML парсер понятия не имеет, что же делать с CDATA, а XML знать не знает про атрибуты без значений.
Если XML валидировать значительно проще, по схемам, то с HTML'ем тут полный ахтунг, и не имеет значения DOCTYPE.
Ещё есть кодировки и всякое, прочее, что точно дает ясность, почему-же XML 1 а HTML совсем другое, и почему их гибрид XHTML вообще третье.

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

Спасибо, да это NPP... Блокнот всё нормально открывает и значения читаются корректно.

Подскажите как читать XML? Чтобы можно было проверить существует ли тэг? Как перебрать все записи с определённым тегом? NodeCount выдает странные количества, анализируя сам xml файл не могу понять как он их считает. Можете небольшой примерчик обработки при чтении дать? В докам по NativeXML что-то не нашёл.
Arkuz вне форума Ответить с цитированием
Старый 14.04.2014, 16:30   #17
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Бывает гибрид XHTML. Бывает нечто на основе XHTML + XSL + HTML.
это из серии "если бы у бабушки .."
всякое бывает, только нам то что? у нас xml
eval вне форума Ответить с цитированием
Старый 14.04.2014, 16:31   #18
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код:
var 
 xml:TNativeXML;
 i:Integer;
begin
  xml:=TNativeXML.Create('MYSUPERROOT');
  for i:= xml.root.NodesCount -1 do
  ....
end;


XML:
<?xml .........>
<MYSUPERROOT>
  <Node>
     ...
  </Node>
  <Node>
     ...
  </Node>
  <Node>
     ...
  </Node>
  <Node>
     ...
  </Node>
  <Node>
     ...
  </Node>
  <Node>
     ...
  </Node>
  <Node>
     ...
  </Node>
  <Node>
     ...
  </Node>
  <Node>
     ...
  </Node>
</MYSUPERROOT>
Код перебирает все Node внутри MYSUPERROOT.

У MS XML куда круче, есть XPath:
Код:
   rootNode.selectNodes("//MYSUPERROOT/Node");
Цитата:
это из серии "если бы у бабушки .."
У меня суровая реальность....

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

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Код перебирает все Node внутри MYSUPERROOT.
Хотелось бы проверить есть ли тег <DSHO_REGISTRY>, чтобы начать разбор, иначе сообщение "файл имеет неизвестный формат". Потом зайти в <HEADER> всё считать, потом перебрать каждый <PATIENT> и всё записать в таблицу. Нужно ли проверять на существование тега или же просто всё заключить в try except и обращаться к тегам в надежде, что они есть?

Код HTML:
<?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>	
	<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>
Arkuz вне форума Ответить с цитированием
Старый 14.04.2014, 17:27   #20
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
uses MSXML; // MS XML

var
  xml: IXMLDOMDocument;
  d: IXMLDOMNode;
  r: IXMLDOMnodeList;
begin
  xml:=CoDOmDocument.Create;
  xml.load('T:\Proxy\a.xml');

//Хотелось бы проверить есть ли тег <DSHO_REGISTRY>
  if xml.documentElement.tagName <>'DSHO_REGISTRY'  then raise Exeption.Create('неверный формат');

// Потом зайти в <HEADER> всё считать  
DecodeHeader( xml.documentElement.selectSingleNode('HEADER') );

//потом перебрать каждый <PATIENT> и всё записать в таблицу  
r:=xml.documentElement.selectNodes('PATIENT');
for j:=1 to r.count-1 do begin
  DecodePatient(r.items[j]);
end;


....
end;

procedure DecodeHeader(d: IXMLDomNode);

procedure DecodePatient(p: IXMLDomNode);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.04.2014 в 17:34.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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