Форум: "Начинающим";
Текущий архив: 2009.08.30;
Скачать: [xml.tar.bz2];
Вниз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 = "&" then
Result := Result + "&"
else
if S = "'" 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c