Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.30;
Скачать: CL | DM;

Вниз

XML Парсер   Найти похожие ветки 

 
Гость   (2009-07-03 13:34) [0]

Здравствуйте. Дорабатываю один проект, по распарсиванию XMl файлов, в проекте используется самодельный парсер. Суть в чем, при получении каких то данных из файла, сейчас начали поступать жалобы от клиентов , в том что в текстах содержатся какие то левые символы. Например Наименование "Товарищество с Ограниченной Ответственностью КарТел & ИнТерц".
Когда смотрю XML через броузер. он покажет как "КарТел & ИнТерц"
В сорсах файла & Я так понял это какие то  коды. Как мне теперь с этим бороться, первое, что пришло в голову это использовать StringReplace такие коды на нормальный текст. Если так правильно. то где взять весь перечень таких кодов, что бы избежать проблем в будущем. Посоветуйте новичку.


 
Palladin ©   (2009-07-03 13:38) [1]

лучше не парить мозги, а использовать готовые парсеры. тот же msxml например.


 
Гость   (2009-07-03 13:49) [2]

Да, просто времени нет на переписку, объемы большие, сроки реально горят. Подскажите что делать, а так бы сам TXMLDocument использовал бы.


 
Palladin ©   (2009-07-03 13:53) [3]

http://www.ascii.cl/htmlcodes.htm


 
Гость   (2009-07-03 14:05) [4]


> http://www.ascii.cl/htmlcodes.htm


То, что надо. Спасибо.


 
KilkennyCat ©   (2009-07-03 23:08) [5]


> лучше не парить мозги, а использовать готовые парсеры. тот
> же msxml например.


Не всегда. Хотя, вроде уже спорили на эту тему... Лично я свой использую Узкая задача = узкий парсер, если проблемы - то только мои, а скорость выше.


 
DVM ©   (2009-07-03 23:19) [6]


> Гость


function CleanInvalidChars(const Str: WideString): WideString;
var
 I: Integer;
begin
 Result := "";

 for I := 1 to Length(Str) do
 begin
   if Str[I] = "&" then
     Result := Result + "&"
   else
   if Str[I] = """" then
     Result := Result + "'"
   else
   if Str[I] = "<" then
     Result := Result + "<"
   else
   if Str[I] = ">" then
     Result := Result + ">"
   else
   if Str[I] = """ then
     Result := Result + """
   else
   if Word(Str[I]) > 255 then
     Result := Result + "&#" + IntToStr(Word(Str[I])) + ";"
   else
     Result := Result + Str[I];
 end;
end;

function CleanXMLChars(const Str: WideString): WideString;
var
 S: WideString;
 I, CharAsNum: LongInt;
begin
 Result := "";

 I := 0;
 while I < Length(Str) do
 begin
   Inc(I);

   if Str[I] = "&" then
   begin
     S := "&";
     while I < Length(Str) do
     begin
       Inc(I);

       S := S + Str[I];
       if Str[I] = ";" then
         Break;
     end;

     if S = "&amp;" then
       Result := Result + "&"
     else
     if S = "&apos;" then
       Result := Result + """"
     else
     if S = "<" then
       Result := Result + "<"
     else
     if S = ">" then
       Result := Result + ">"
     else
     if S = """ then
       Result := Result + """
     else
     if (Length(S) > 3) and (S[2] = "#") then
     begin
       CharAsNum := StrToIntDef(Copy(S, 3, Length(S) - 3) , -1);

       if CharAsNum = -1 then
         Result := Result + S
       else
         Result := Result + WideChar(CharAsNum);
     end else
       Result := Result + S;
   end else
     Result := Result + Str[I];

 end;
end;


 
TIF ©   (2009-07-04 02:15) [7]

KilkennyCat ©   (03.07.09 23:08) [5]
> Не всегда. Хотя, вроде уже спорили на эту тему...

Кстати да. В "Прочем" стоит поискать тему, совсем недавно обсуждение было



Страницы: 1 вся ветка

Текущий архив: 2009.08.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
2-1246547552
Zheksonz
2009-07-02 19:12
2009.08.30
Преобразование


15-1246449417
@!!ex
2009-07-01 15:56
2009.08.30
Ограничить сеть Virtual Box a


2-1246467765
AlexDan
2009-07-01 21:02
2009.08.30
Преобразование строки..


15-1246342790
Холивар
2009-06-30 10:19
2009.08.30
Библиотеки DirectX


3-1226570266
Alex sh
2008-11-13 12:57
2009.08.30
DELPHI MS SQL Oracle