PDA

Просмотр полной версии : Чтение кривого XML файла


jurik_5
02.06.2009, 17:07
Сталкнулся с такой проблемой.
Есть некий XML файл, сотварённый сторонней программой.
Видимо где-то, почену-то файл создался некорректно, тоесть... например должно быть:

.....
<DATA NAME="Data name1" ID="1" />
<DATA NAME="Data name2" ID="2" />
<DATA NAME="Data name3" ID="3" />
.....

а в данном XML:

.....
<DATA NAME="Data name1" ID="1" />
<DATA NA
ME="Data name2" ID="2" />
<DATA NAME="Data name3" ID="3"
/>
.....


Из-за этого при чтении AS натыкается на разорванный тэг(перенесённый на другую строку) и заканчивает шерстить XML.
Можно ли обойти такие места. Или проблема решается только перелопачиванием XML?

scarbo
02.06.2009, 19:10
ignoreWhite = true?

Mnilionic
03.06.2009, 00:43
лучше конечно исправить "битые xml" в источнике. Но если знать точные правила по которым случаются "проколы", можно попытаться написать "чинилки" с помощью регулярных выражений.

jurik_5
03.06.2009, 09:43
ignoreWhite = true?

пробовал, не помогло.

Может быть можно пропустить XML файл через .split .join, а потом результат присвоить переменной которую читать как XML?

dimarik
03.06.2009, 12:01
пробовал, не помогло.

А должно было помочь. Выложите архивом кусочек кривого XML.

jurik_5
03.06.2009, 12:20
вот тот самый XML

dimarik
03.06.2009, 13:41
В результате анализа предоставленного XML обнаружил следующие ляпы:

В значениях аттрибутов присутствуют строки с невалидными UTF8 символами.

00000000h: 3C 52 4F 57 20 42 6F 64 79 3D 22 D0 BF D0 BE 20 ; <ROW Body="РїРѕ
00000010h: D1 0D 0A 20 80 D0 B0 D0 B1 D0 BE D1 87 D0 B8 D0 ; С.. ЂР°Р±РѕС‡РёР
00000020h: BC 20 D0 B4 D0 BD D1 8F D0 BC 20 22 2F 3E ; ј РґРЅСЏРј "/>

Отмеченная последовательность разбивает символ UTF8 "р" кириллическое, код D180h.

jurik_5
03.06.2009, 17:21
Спасибо за проверку XML.

А не подскажите как можно обойти эту ошибку.

dimarik
03.06.2009, 18:14
Воспользуйтесь советом камрада Mnilionic и напишите свой валидатор-корректор.

Mnilionic
03.06.2009, 21:14
пробовал, не помогло.
и не должно было. Игнорвайт пропускает текстовые ноды состоящие только из пробельных самволов. А в данном случае - это имя атрибута.