
Смышленный
  
Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля
Репутация: нет Всего: 38
|
Есть следующая XML: | Код | <DataList Key='Из рук в руки' NextLink='http://www.irr.ru/index.do?s_eq_categories=34&cid=34&s_=1&so_so_x=desc_valid_from&s_eq_offer=%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%BC&s_eq_regions=34&s_qu_make=%D0%92%D0%90%D0%97&s_qu_model=21093&s_ge_year=2000&s_le_year=2007&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&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;
|
Не помогает
|