Секрет DOM XML для баз данных

Тема в разделе ".:: Готовые решения", создана пользователем dumber, 19 июл 2008.

Статус темы:
Закрыта.
  1. dumber

    dumber

    Регистр.:
    23 апр 2007
    Сообщения:
    272
    Симпатии:
    123
    :) ну заголовок пожалуй громковат, но все таки.
    Проблема в том что если вы захотите свой XML документ всунуть в БД а затем загрузить его то наткнетесь на небольшую проблемку, которая как видно из выдачи поисковиков встречается не редко.
    Полюбуйтесь
    _http://nigma.ru/index.php?s=%22Extra+content+at+the+end+of+the+document+in+Entity%22&t=web&ui=76193&gl=1&yh=1&ms=1&yn=1&rm=1&av=1&ap=1&nm=1&lang=all
    _http://ukhems.test.geo-xpres.com/contact-us

    Ошибка Extra content at the end of the document in Entity вводит в ступор любого начинающего мудохаться с ДОМ (ну не один же я идиот такой :-]) а означает она что вообщем-то документ непрально сделан и load функции его не читают. "Как плять неправильно если я его через сам ДОМ и делал? (дальше идет пиииииии)" ну сделали да и флаг вам в руки :)
    Движок плюется потому что документ непральный.
    Щас поясню:

    Вот этот код выдаст ошибку

    PHP:
    $doc = new DomDocument();

    $xmlTxt = '<?xml version="1.0"?>
    <item rel="1" title="Link 1" link="http://nulled.ws" desc="Link to heaven"><item rel="4" title="subLink 1" link="http://nulled.ss" desc="subLink 1 to heaven"/></item>
    <item rel="2" title="Link 2" link="https://nulled.cc" desc="Link 2 to heaven"/>
    <item rel="3" title="Link 3" link="http://nulled.cn" desc="Link 3 to heaven"/>';

    $doc->loadXML($xmlTxt);
    echo $doc->saveXML();
    потому что в нем добавляются какие-то странные элементы после первого ITEM (не спрашивайте меня "почему") Чтобы наш лоудер не плевался весь контент документа надо засунуть в контейнер.
    Вот это код ошибки не даст

    PHP:
    $doc = new DomDocument();

    $xmlTxt = '<?xml version="1.0"?>
    <items>
    <item rel="1" title="Link 1" link="http://nulled.ws" desc="Link to heaven"><item rel="4" title="subLink 1" link="http://nulled.ss" desc="subLink 1 to heaven"/></item>
    <item rel="2" title="Link 2" link="https://nulled.cc" desc="Link 2 to heaven"/>
    <item rel="3" title="Link 3" link="http://nulled.cn" desc="Link 3 to heaven"/>
    </items>';

    $doc->loadXML($xmlTxt);
    echo $doc->saveXML();

    То есть при оформлении XML документа, помните что должна быть древовидная структура и корень 1 а не несколько тогда парсер ошибок выдавать не будет.

    В интернете несмотря на распространеность ошибки не увидел ни одного пояснения ;) так что можно сказать эксклюзив от Dumber :D
     
    exserfer нравится это.
  2. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    Это стандарт XML - чтобы код был валидный, необходим один корневой элемент, из которого все растет.
    Тоже мне открыл Америку. :)
    Хотя новичкам полезно будет, как и чтение документации.
     
Статус темы:
Закрыта.