Kamil Szalewski

Kamil Szalewski myślę, projektuję i
staram się tworzyć

Temat: Parsowanie niepoprawnego xml

Witam,
Muszę przeparsować niepoprawnie zapisany plik xml, nie zawiera on nagłówka z kodowaniem, nawet po wejściu przez przeglądarkę dostaję błąd - struktura jest prawidłowa. Jednak w treści znajdują się np. twarde spacje. SimpleXML wywala błędy w stylu
Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]: (...):795: parser error : Entity 'nbsp' not defined in (...) on line 3.


Próbuję zainicjować go standardowo:
$xml = new SimpleXMLElement( $url, NULL, TRUE );

, wszystkie rozwiązania jakie znalazłem nie sprawdzają się. Mógłbym liczyć na jakąś podpowiedź jak rozwiązać ten problem?

Pozdrawiam,
KamilKamil Szalewski edytował(a) ten post dnia 14.01.11 o godzinie 13:04

konto usunięte

Temat: Parsowanie niepoprawnego xml

A nie próbowałeś przepuścić XML przez Tidy zanim zaczniesz je parsować simplexml ?

http://tidy.sourceforge.net/

Jak próbowałeś innych rozwiązań to napisz co to było. Nie będziemy błądzić :)Adam Piotrowski edytował(a) ten post dnia 14.01.11 o godzinie 13:11
Tomasz Budzyński

Tomasz Budzyński Programista,
Devesoft Software
Development

Temat: Parsowanie niepoprawnego xml

Zły nagłówek masz na myśli nagłówek w pliku XML gdzie są definicje czy nagłówek zwracany przez serwer www ?
Błąd który wyskakuje ci przy SimpleXMLElement wskazuje że znak & nie został zmianiony na & lub całość treści nie znalazła się w znakach <![CDATA[ ]]>. Moim zdaniem jeśli tak jest to jest to błąd XML a nie nagłówka. Czy możesz pokazać ewentualnie ten plik ?

konto usunięte

Temat: Parsowanie niepoprawnego xml

Kamil Szalewski:
Muszę przeparsować niepoprawnie zapisany plik xml, nie zawiera on nagłówka z kodowaniem
Przecież sam możesz dokleić ten nagłówek.
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: Parsowanie niepoprawnego xml

To raczej nie nagłówek tylko właśnie to, co pokazał komunikat SimpleXML. W XML nie masz zdefiniowanej encji &nbsp;  ona jest w HTML. Dlatego się burzy, bo nie widzi encji w domyślnym DTD.Bartosz Ratajczyk edytował(a) ten post dnia 14.01.11 o godzinie 15:10
Kamil Szalewski

Kamil Szalewski myślę, projektuję i
staram się tworzyć

Temat: Parsowanie niepoprawnego xml

Bartosz Ratajczyk:
To raczej nie nagłówek tylko właśnie to, co pokazał komunikat SimpleXML. W XML nie masz zdefiniowanej encji    ona jest w HTML. Dlatego się burzy, bo nie widzi encji w domyślnym DTD.

Właśnie pytałem o to (trochę nieudolnie), czy w jakiś sposób da się to ominąć. Z nagłówkiem napisałem tylko informacyjnie (myślałem, że problemem jest kodowanie i dlatego nie rozpoznaje tych znaków). Próbowałem rozwiązać problem, wycinając te znaki z xml'a: pobieram sobie treść przez file_get_contents, potem wycinam znaki (po kolei str_replace) i wpuszczam do SimpleXML.

Tylko plik xml jest duży i w zależności jak wiatry powieją albo przejdzie, albo wywali błąd przekroczenia czasu wykonywania... Można zrobić to jakoś z automatu przy pobieraniu lub już w inicjowaniu SimpleXML?Kamil Szalewski edytował(a) ten post dnia 14.01.11 o godzinie 15:21

konto usunięte

Temat: Parsowanie niepoprawnego xml

Bartosz Ratajczyk:
To raczej nie nagłówek tylko właśnie to, co pokazał komunikat SimpleXML. W XML nie masz zdefiniowanej encji    ona jest w HTML. Dlatego się burzy, bo nie widzi encji w domyślnym DTD.
Zgadza się, dlatego trzeba zamienić &nbsp; na &#160; i powinno być ok.Tomasz K. edytował(a) ten post dnia 14.01.11 o godzinie 15:23
Tomasz Budzyński

Tomasz Budzyński Programista,
Devesoft Software
Development

Temat: Parsowanie niepoprawnego xml

Kamil Szalewski:

Tylko plik xml jest duży i w zależności jak wiatry powieją albo przejdzie, albo wywali błąd przekroczenia czasu wykonywania... Można zrobić to jakoś z automatu przy pobieraniu lub już w inicjowaniu SimpleXML?Kamil Szalewski edytował(a) ten post dnia 14.01.11 o godzinie 15:21

Jeśli simpleXML nie "wykrzaczy" ci się z powodu braku ramu to zmień czas wykonywania na dłuższy. Albo jeśli chcesz mieć większa kontrole nad parsowaniem xml'a to użyj parsera z libxml'a. Więcej czasu zejdzie ci na pisanie obsługi tagów ale za to lepiej można kontrolować wszystko.
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: Parsowanie niepoprawnego xml

A jak chcesz się bawić z nagłówkiem, to możesz dać tak na początku (sklejając razem znaki & # 1 6 0):

<?xml version="1.0"?>
<!DOCTYPE some_name [
<!ENTITY nbsp " & # 1 6 0 ">
]>
Bartosz Ratajczyk edytował(a) ten post dnia 14.01.11 o godzinie 17:27
Kamil Szalewski

Kamil Szalewski myślę, projektuję i
staram się tworzyć

Temat: Parsowanie niepoprawnego xml

Jest okej, dzięki za pomoc ;)

Pozdrawiam,
Kamil

Następna dyskusja:

Template'y i parsowanie kod...




Wyślij zaproszenie do