PDA

Просмотр полной версии : """ вместо кавычек


humble david
01.08.2007, 00:34
Здравствуйте!
Проблема такого характера. Получаю с сервера хмл, одним из нодов, которого в свою очередь тоже является хмл. И вот, этот вложенный хмл, состоит из последовательностей """ вместо ковычек и т.д.
Что можно сделать?

etc
01.08.2007, 00:35
Пример XML, пожалуйста.

humble david
01.08.2007, 00:50
[откоцано 4 КБ XML]

нод <level_data> по идее хмл еще один

etc
01.08.2007, 01:17
О боже, что мешало прицепить в архиве, а?
CDATA в помощь.

Usnul
01.08.2007, 02:04
в целях экономии места, я бы использовал какую-нибудь более краткую и удобную комбинацию, а вообще не понимаю о чем идет речь.

CorC
01.08.2007, 10:01
А в чем проблема с &quot;? ведь во флеше оно верно отобразится, как надо.

humble david
01.08.2007, 11:52
Проблема в том, что сиомволы "'", "<", ">" вложенного хмля разбиваются на подобные последовательности и с передаваемым xml не представляется возможным работать.
CDATA я использую, для передачи информации на сервер. Но получаю я уже такие последовательности. Как мне из них хмл собрать опять?

humble david
01.08.2007, 12:46
Спрошу по-другому.
Что мне надо сделать, чтобы вот этот код возвращал XML, с которым можно работать?
var leveltxt = "&lt;objects name=&quot;myName &quot; &gt;&lt;object name=&quot;rino&quot; type=&quot;single&quot; /&gt;&lt;object name=&quot;tree4&quot; type=&quot;tree&quot; x=&quot;320&quot; y=&quot;197.4&quot; N=&quot;40&quot; id=&quot;tree4&quot; isBorder=&quot;true&quot;/&gt;&lt;/objects&gt;";
levelData = new XML();
levelData.parseXML(leveltxt);

etc
01.08.2007, 12:48
Нужно на самом сервере сделать так, чтобы он такой XML больше не выдавал.

humble david
01.08.2007, 12:51
понял. а флеш-клиент ниче все-таки не может сделать? кроме, скажем, диких функций, которые все эти дела найдут и заменят на нормальные символы...

etc
01.08.2007, 13:03
Может, но это неправильно с точки зрения организации.

humble david
01.08.2007, 13:22
вообще, в базу, из которой этот хмл сервер берет и дает мне, я же его и кладу (то есть сам вложенный хмл). Кладу его используя <![CDATA[...]]>. Но может здесь какая-то ошибка есть?

etc
01.08.2007, 13:23
Тега CDATA в приведенном XML нет.

humble david
01.08.2007, 13:40
а почему он там должен быть? сервер же считывает сами данные в этом теге и кладет в базу, потом эти данные возращает...

etc
01.08.2007, 13:44
Сервер должен выдавать XML без всяких &lt; и &gt; и иже с ними и точка.

humble david
01.08.2007, 14:16
проблема не решена

etc
01.08.2007, 14:22
Ну так решайте проблему на сервере, а не клиенте, говорят же.

Kikasso
01.08.2007, 14:25
http://www.php.net/manual/en/function.html-entity-decode.php

humble david
02.08.2007, 01:14
Вот решение проблемы:
при передачи данных на сервер, используется примерно такая схема:
str = "<level_data><![CDATA[" + escape(level_data.toString()) + "]]></level_data>";
при получении же:

socket.onXML = function(doc) {
var e = doc.firstChild;
var leveltxt = e.toString();
leveltxt = unescape(leveltxt);
levelData = new XML();
levelData.parseXML(leveltxt)
}

etc
02.08.2007, 10:06
О боже… :wacko:
Что в лоб, что по лбу. Не должен флеш так делать! Он посылает нормальный XML, сервер его должен получить и нормально выдавать!
level_data — XML чистой воды. Зачем его escape-тить, запихивать черт знает куда (в CDATA) и отправлять в таком кастрированном виде? Что помешало отправить level_data как есть? Почему нельзя заставить нормально работать сервер? На данный момент приведенное решение является кривым до невозможности, мало того, что сервер криво обрабатывает XML, так ещё и флеш занимается какой-то дурацкой конвертацией и перемешиванием XML из-за кривости сервера…