![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2005
Сообщений: 94
|
Подскажите плиз, кто работал с xPath для флэша, как полечить/обойти передачу CDATA < и >
все теги внутри цдаты передаются ескейп последовательностями а не обычными значками ![]() т.е |
|
|||||
|
Modus ponens
|
Работал с этим замечательным примером попытки пришить флешу класс тупо скопированый из другого языка. При первой же возможности выбросил -- чего и другим советую. Весь функционал этого многостраничного произведения умещается при желании в 1, максимум 2 файла по 200 строк максимум (оригинал раз эдак в 10 больше, если память не изменяет).
С CDat"ой мозгут быть 2 варианта - вы указываете на родительский нод, а не на нод с датой (тогда текст будет ХТМЛ-енкодед) или пользуйтесь escape/unescape.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 94
|
не помогло.
Все равно где встречается цдата заменяется ![]() |
|
|||||
|
Modus ponens
|
Если есть желание подождать - прийду домой - сделаю =)
Это так, пока, пища для размышлений =)
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 94
|
я знаю что можно использовать nodevalue
![]() но на данный момент нужно именоо xPath Цитата:
![]() |
|
|||||
|
Modus ponens
|
Ок, посмотрел код... а что вы хотите получить собственно? =\
- Массив из строк, где техт будет не ХТМЛ-енкодед? - Массив из узлов? (частично включающих ЦДату)? function getTitle(xml:XML) {
var titles:Array = XPath.selectNodes(xml, "/linkage/link/title/text()");
for (var i=0; i<titles.length; i++) {
trace("titles[" + i + "] : " +titles[i].nodeValue);
}
}
Просо, не понятна конечная цель, и смысл использования этого горячечного бреда... (хПас)
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 94
|
содержимое потом в текстовое хтмл поле будет засовываться..
и если нужен будет жирный шрифт например то поле не считает, что полученный текст есть хтмл а выводит символы getTitle2,getTitle3 выводят узлы но внутри там далеко не цдата, а текст.. хтмл разметка пропадат все равно.. Временно решил проблему заменой на нормальные символы Цитата:
|
|
|||||
|
Modus ponens
|
Самому написать - меньше получаса работы...
Ок, попробую объяснить на более простом примере, что вы пытаетесь сделать, и почему это делать не нужно таким способом... class SomeClass {
private var __s:String = "";
function SomeClass(s:String){
_s = s;
}
public function toString():String {
if(_s.indexOf("![CData")>-1){
return escape(_s.slice(_s.indexOf("[",2)+1,_s.indexOf("]")));
} else {
return _s;
}
}
public function get _s():String {
return __s;
}
public function set _s(s:String):Void {
__s = s;
}
}
var _sc:SomeClass = new SomeClass("![CData[<H1>Header</H1>]]");
trace(_sc);
var _sc:SomeClass = new SomeClass("<H1>Header</H1>");
trace(_sc);
Вам, для того, чтобы воспользоваться тегом CData (иначе он вам вообще не нужен) нужно обращаться к его свойсву nodeValue, а не методу toString()/valueOf(). Иначе вы естественно получите то, что получаете =)
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Dec 2005
Сообщений: 94
|
хорошо. если хмлка будет несколько метров? вариантов решения обращения именно через
сколько же раз придеться пробегать все дерево чтобы выдрать нужную часть?
Если же все это при одно заходе а потом в массивы, то памяти ест немеренно.. и тормоза.. |
|
|||||
|
Modus ponens
|
Млин, ну как это еще объяснить. Вы пытаетесь обратится не к тому методу и удивляетесь, что получаете не тот результат, которого ожидали? - Ну так вот работает ХMLNode.toString() - не нравится - не используйте/перепишите (хотя смысла я в этом не вижу).
И вообще, я не понимаю по прежнему что именно у вас не получается, и что вы хотите сделать. Вам selectNodes() возвращает массив из нодов (не строк). Нужно отобразить узел как строку - if NodeType != 4 -> выводим так. нет -> выводим хоть по-китайски.
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|