[XML][DOM] Неожиданно перестал понимать! (С картинками)
Здравствуйте!
Сейчас столкнулся с ситуацией, в которой понял, что я ничего не понимаю в XML и DOM. Начал проверять сам себя на примитивных примерах. Вот один из них. Нужно создать html-файл следующего содержания, и открыть его в браузере: Код:
<html><body> FireFox 3.6 покажет нам следующее: ![]() Тут сразу возникает куча вопросов: - Почему элемент version включает в себя все остальные элементы team, вместо того чтоб быть с ними на одном уровне? - Почему элементы line включают себя рекурсивно, вместо того чтоб быть на одном уровне? - (Вообще эпично) Почему элемент table идёт после всех своих элементов line, хотя на деле элементы line должны находиться внутри table? Opera 11 покажет нам следующее: ![]() Тут не так печально, как в FireFox, но нарушение первоначальной структуры тоже неслабое: - Почему элемент version включает в себя все остальные элементы team, вместо того чтоб быть с ними на одном уровне? - Почему элементы line включают себя рекурсивно, вместо того чтоб быть на одном уровне? Пояснение: это кусок JavaScript-проекта, в котором используется jQuery, и некоторые слабоструктурированные данные вставляются в код страницы в виде блока <xml>...</xml>. Вопрос. Почему браузеры так некорректно раскладывают DOM-представление такого простого примера? Как исправить? |
Цитата:
требую пруфлинк на документацию по тегу(а именно какому стандарту он соовтествует), и пруфлинк о поддержке его различными браузерами |
Цитата:
http://www.expertrating.com/coursewa...ing-HTML-8.asp Вопрос. Если действительно нельзя вставлять куски XML в HTML, то как народ вообще делает разработку, когда много неструктурированных данных и интерфейс весь написан на JavaScript? |
Еще ссылка:
http://www.w3schools.com/xml/xml_dont.asp Кроме того, браузеры работают с этим тэгом, и JavaScript может гулять по его дереву, и jQuery нормально его видит. Проблема в одном - кривое дерево. Я сейчас даже DTD блок добавил - фигушки, парсится всеравно криво. |
Цитата:
а почитать, о том, как реально обстоят дела, и как должны обстоять -- не хватает? поищите внимательнее инфу об этом теге. проблема не в том, что вы неправильно понимаете XML(пока что вы показали верное понимание его стандартов) а в том, что вы используете какую-то ненормативную хуйню Вот, ваш код Будучи сохраненным как самостоятельный XML-документ он нормально парситься Код:
<?xml version="1.0" encoding="utf-8"?> В вашем случае, видимо содержимое тега XML все еще парсится как HTML. ведь HTML вообще-то не имеет ни малейшего отношения к XML он наследует SGML-стандарты Впрочем, и XHTML, потомок XML в FF3 не хочет парсить ваш код |
Цитата:
Цитата:
А JavaScript и jQuery работают с куском, заключенным в <xml> только потому, что эти элементы попадают в DOM-дерево. Но эти экзотичнские имена элементов неизвестны браузеру, и при рендеринге браузер их тупо игнорирует, что и должен делать каждый приличный браузер. При анализе браузер видимо предполагает, что у каждого тега должен быть закрывающий тег. "Короткие" теги возможны только для небольшого числа элементов, типа <br/>. И если тег не принадлежит к группе "короткие" - а экзотка не принадлежит ни к какой группе - то для экзотического тега даже не проверяется его "короткость", и ищется закрывающий тег. Если в примере вместо коротких тегов добавить закрывающие, то ситуация исправляется. Кстати, FF спотыкается на теге <table>, ибо "знает" его и пытается его пропарсить именно как <table>. Всвязи с вышесказанным, два вопроса. 1. Имеет ли смысл такое решение: Используем для тегов "самодельные" имена с префиксом (например, <xml_table>, <xml_line>...), плюс снабжаем все теги закрывающими тегами. Префикс сделает все теги неизвестными браузеру. Браузер обязан игнорировать такие неправильные теги, но в DOM они разместятся, и с ними можно работать. Да, это решение не по стандарту, но вроде как ни в одном из современных браузеров проблем возникнуть не должно, если только браузер не будет исключать из DOM-представления неизвестные ему теги. 2. Как нынче разработчики передают в JavaScript большие куски слабоструктурированной информации? XML для этого подходит идеально, но как его передавать? |
Цитата:
Если я хочу передать в сгенерированной странице что-то в JS, то я его и передаю в JS, никак не задействуя разметку. то есть я генерю JS-код, который объявляет массив напрмиер так: echo '<script type="text/javascript">'; echo 'var variable = ' . json_encode (array(1,'q'=>2)) . ';'; echo '</script>'; Если же я хочу передать в JS данные, используя AJAX, то использую встроенный в XHR инструмент парсинга XML, либо (я предпочитаю) тот же JSON Честно не понимаю, как вы дошли к вашему текущему решению, и обошли стандартные нормальные решения? Если я неправильно понял вашу конечную задачу, то опишите ее более ясно |
Цитата:
На сервере вся внутренняя часть, все обсчеты и передача данных между логическими блоками делатся с помощью XML. Некоторый функционал написан на C++, используется библиотека libxml. Идея была в том, чтобы на сервере взять кусок XML из БД (описание игрока), отправить его в "решатель", отправить этот же XML-кусок в браузер вместе с решением, и браузер технично отрисует игровую ситуацию. Я не ожидал, что современные браузеры не могут работать с произвольным XML-деревом, что в них даже нету стандартных средств для этого, хотя DOM присутсвует в полном объеме. В общем, видимо придется использовать JSON. Только при этом возрастет нагрузка на сервер из-за перекодирования XML<->JSON, а я этого очень не хотел. |
Цитата:
http://alexmuz.ru/php-json_encode/ |
гляньте в сторону XSLT, вдруг то что нужно
http://www.w3schools.com/xsl/xsl_client.asp |
Часовой пояс GMT +3, время: 20:47. |