Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Русский язык в XMLDocument 
:(
    Опции темы
aktuba
Дата 11.2.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: нет
Всего: 38



Есть следующая XML:
Код

<DataList Key='Из рук в руки' NextLink='http://www.irr.ru/index.do?s_eq_categories=34&amp;cid=34&amp;s_=1&amp;so_so_x=desc_valid_from&amp;s_eq_offer=%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%BC&amp;s_eq_regions=34&amp;s_qu_make=%D0%92%D0%90%D0%97&amp;s_qu_model=21093&amp;s_ge_year=2000&amp;s_le_year=2007&amp;fieldsSequence=s_eq_categories%2Cs_%2Cs_eq_offer%2Cs_eq_regions%2Cs_qu_make%2Cs_qu_model%2Cs_ge_year%2Cs_le_year%2Cs_go_price_usd%2Cs_lo_price_usd%2C%2Cs_ge_photos%2Cs_eq_source_id&amp;page=30%2C30'>
    <DataItem Title='ВАЗ 21093, 2001 г.в., механика, 1500 см. куб' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37612313,746,34.html' Price='$ 4 000' City='Москва' Date='11.02.2007 13:31'/>
    <DataItem Title='ВАЗ 21093, 2001 г.в., механика, 1500 см. куб' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37612021,746,34.html' Price='$ 4 000' City='Москва' Date='11.02.2007 12:42'/>
    <DataItem Title='ВАЗ 21093, 2001 г.в., механика, 1500 см. куб' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37611015,746,34.html' Price='$ 4 200' City='Москва' Date='11.02.2007 12:28' PicLink='http://img.irr.ru/31/70/69-list.jpg'/>
    <DataItem Title='ВАЗ 21093, 2004 г.в., механика, 1500 см. куб' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37609786,746,34.html' Price='$ 5 500' City='Москва' Date='11.02.2007 02:05'/>
    <DataItem Title='ВАЗ 21093, 2000 г.в., механика, 1500 см. куб' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37605252,746,34.html' Price='$ 3 800' City='Москва' Date='<span class="yesterday">вчера</span> 14:03' PicLink='http://img.irr.ru/31/58/f4-list.jpg'/>
    <DataItem Title='ВАЗ 21093, 2000 г.в.' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37599570,746,34.html' Price='$ 3 400' City='Москва' Date='<span class="yesterday">вчера</span> 10:37'/>
    <DataItem Title='ВАЗ 21093, 2000 г.в., механика' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37599371,746,34.html' Price='-' City='Москва' Date='<span class="yesterday">вчера</span> 09:50'/>
    <DataItem Title='ВАЗ 21093, 2000 г.в., механика' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37529646,746,34.html' Price='$ 3 500' City='Москва' Date='09.02 19:00'/>
    <DataItem Title='ВАЗ 21093, 2002 г.в., механика' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37517869,746,34.html' Price='$ 5 000' City='Московская обл.' Date='09.02 16:17' PicLink='http://img.irr.ru/31/39/95-list.jpg'/>
    <DataItem Title='ВАЗ 21093, 2001 г.в., механика' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37517063,746,34.html' Price='$ 4 000' City='Москва' Date='09.02 15:58'/>
    <DataItem Title='ВАЗ-21093 2001 г.в., Нептун, антикор, подкрылки, сигнал., ЦЗ' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37502008,746,34.html' Price='$ 4 000' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2003 г.в., черный, 61646 км, продаю. 150 тыс.руб. 8-926-' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37432006,746,34.html' Price='150 000 руб.' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2001 г.в., 40 тыс.км, Нептун металлик, ЦЗ, сигнал.' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37368035,746,34.html' Price='$ 5 000' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2001 г.в., ниагара, 58 тыс.км, музыка, сигнал., Гарант' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37008104,746,34.html' Price='$ 3 950' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2002 г.в., 58 тыс.км, фиолетовый метал., тонир., лит.' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37498065,746,34.html' Price='-' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2000 г.в., 80 тыс.км, зеленый мет., продаю срочно' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37500135,746,34.html' Price='$ 3 700' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2002 г.в., папирус, 65 тыс.км, музыка, сигнал., Гарант' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37005116,746,34.html' Price='$ 4 250' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 99 г.в., экспл. с 2000 г., папирус, 70 тыс.км, антикор' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37504127,746,34.html' Price='$ 2 650' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 карбюратор, 2003 г.в., т-зеленый мет., 100 тыс. км' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37370081,746,34.html' Price='120 000 руб.' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2001 г.в., 79 тыс.км, т.-вишневый, MP3, оптика, тонир.' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37186080,746,34.html' Price='$ 4 150' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2002 г.в., зеленый металлик, 70 тыс.км, тонировка' Link='http://www.irr.ru/cars/passenger/used/showAdvert,35268133,746,34.html' Price='126 000 руб.' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2000 г.в., золотистый метал., 1.5 л карб., 70 тыс.км' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37497206,746,34.html' Price='$ 3 000' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2001 г.в., экспл. с 2002 г., карбюр., высок. панель' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37505231,746,34.html' Price='$ 4 200' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 октябрь 2000 г.в., 110 тыс. км, зеленый, антикор, подкрылки' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37497223,746,34.html' Price='$ 3 800' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 карбюр., 2001 г.в., коралл, 60 тыс.км, магнитола, сигнализ.' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37079183,746,34.html' Price='$ 3 800' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2000 г.в., белый, тонировка, CD МР3, литые диски R-14' Link='http://www.irr.ru/cars/passenger/used/showAdvert,36720215,746,34.html' Price='$ 4 600' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 декабрь 2002 г.в., 108 тыс.км, зеленый метал., не битый' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37371261,746,34.html' Price='$ 4 850' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 2000 г.в., 1.5 л, карб., гранат, на ходу, кузов в средн.' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37010280,746,34.html' Price='$ 2 500' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 91 г.в., белый, КПП и двиг. отремонтир. 12.2006 г.' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37433356,746,34.html' Price='45 000 руб.' City='Москва' Date='09.02 10:11'/>
    <DataItem Title='ВАЗ-21093 карбюратор, 2001 г.в., синий метал., 70 тыс.км, антикор' Link='http://www.irr.ru/cars/passenger/used/showAdvert,37501297,746,34.html' Price='$ 3 800' City='Москва' Date='09.02 10:11'/>
</DataList>


Я хочу на основе этой XML построить дерево:

Код

procedure TfrmMain.ParseXML(AData: string);
var
  ParentXMLNode, ChildNode: IXMLNode;
  lSite: WideString;
  Idx: Integer;
  lData: TDataNode;
begin
  try
    XMLDocument.XML.Clear;
    XMLDocument.Active := True;
    XMLDocument.XML.Text := AData;
    try
      ParentXMLNode := XMLDocument.ChildNodes.FindNode(C_XML_DataList);
      if ParentXMLNode = nil then Exit;
      lSite := ParentXMLNode.Attributes[C_XML_Site];
      for Idx := 0 to ParentXMLNode.ChildNodes.Count - 1 do
        begin
          ChildNode := ParentXMLNode.ChildNodes[Idx];
          if ChildNode.NodeName = C_XML_DataItem then
            begin
              if not ChildNode.HasAttribute(C_XML_Caption) then Continue;
              lData.Caption := ChildNode.Attributes[C_XML_Caption];
              if ChildNode.HasAttribute(C_XML_Region)
                then lData.Region := ChildNode.Attributes[C_XML_Region]
                else lData.Region := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_Year)
                then lData.Year := ChildNode.Attributes[C_XML_Year]
                else lData.Year := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_Km)
                then lData.Km := ChildNode.Attributes[C_XML_Km]
                else lData.Km := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_Price)
                then lData.Curr := ChildNode.Attributes[C_XML_Price]
                else lData.Curr := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_Link)
                then lData.Link := ChildNode.Attributes[C_XML_Link]
                else lData.Link := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_PicLink)
                then lData.PicLink := ChildNode.Attributes[C_XML_PicLink]
                else lData.PicLink := EmptyWideStr;
              AddDataToVT(lData);
            end;  
        end;  
    finally
      XMLDocument.Active := False;
    end;
  except
  end;
end;


Как только доходит до первого обращения к XML - возникает ошибка и происходит выход из процедуры. Я заметил, что это происходит тогда, когда в XML есть русский текст. Когда русского текста нет - все работает отлично. Чтобы исправить это пытаюсь сделать следующее:

Код

procedure TfrmMain.ParseXML(AData: string);
var
  ParentXMLNode, ChildNode: IXMLNode;
  lSite: WideString;
  Idx: Integer;
  lData: TDataNode;
begin
  try
    AData := '<?xml version="1.0" encoding="UTF-8" ?>'+ #13#10 + AnsiToUtf8(AData);
    XMLDocument.XML.Clear;
    XMLDocument.Active := True;
    XMLDocument.Encoding := 'UTF-8';
    XMLDocument.XML.Text := AData;
    try
      ParentXMLNode := XMLDocument.ChildNodes.FindNode(C_XML_DataList);
      if ParentXMLNode = nil then Exit;
      lSite := ParentXMLNode.Attributes[C_XML_Site];
      for Idx := 0 to ParentXMLNode.ChildNodes.Count - 1 do
        begin
          ChildNode := ParentXMLNode.ChildNodes[Idx];
          if ChildNode.NodeName = C_XML_DataItem then
            begin
              if not ChildNode.HasAttribute(C_XML_Caption) then Continue;
              lData.Caption := ChildNode.Attributes[C_XML_Caption];
              if ChildNode.HasAttribute(C_XML_Region)
                then lData.Region := ChildNode.Attributes[C_XML_Region]
                else lData.Region := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_Year)
                then lData.Year := ChildNode.Attributes[C_XML_Year]
                else lData.Year := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_Km)
                then lData.Km := ChildNode.Attributes[C_XML_Km]
                else lData.Km := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_Price)
                then lData.Curr := ChildNode.Attributes[C_XML_Price]
                else lData.Curr := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_Link)
                then lData.Link := ChildNode.Attributes[C_XML_Link]
                else lData.Link := EmptyWideStr;
              if ChildNode.HasAttribute(C_XML_PicLink)
                then lData.PicLink := ChildNode.Attributes[C_XML_PicLink]
                else lData.PicLink := EmptyWideStr;
              AddDataToVT(lData);
            end;  
        end;  
    finally
      XMLDocument.Active := False;
    end;
  except
  end;
end;


Не помогает  smile  smile 


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Rodman
Дата 12.2.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: нет
Всего: 122



а если windows-1251 использовать?!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Snowy
Дата 12.2.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 4
Всего: 484



Ошибка возникает при попытке декодировать текст 1251 из UTF-8.
Поскольку текст вовсе не является utf-8, возникает ошибка.
Либо текст переведи в utf-8, либо пропиши правильную кодировку - Windows-1251
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.