Тема: xPath
Показать сообщение отдельно
Старый 17.12.2007, 21:13
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Самому написать - меньше получаса работы...

Ок, попробую объяснить на более простом примере, что вы пытаетесь сделать, и почему это делать не нужно таким способом...
Код:
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);
Итак, функция возвращает вам массив состоящий из объектов типа XMLNode, у них бывает еще и nodeType, который и указывает, каким образом нужно конвертировать экземпляр данного класса в строку. Так вот, узел типа CData конвертируется в строку именно таким способом - но это ни разу в жизни не значит, что его содержимое (nodeValue) является той строкой, которую вы видите в окне output'а! nodeValue - такое же свойство объекта, как и любое другое.
Вам, для того, чтобы воспользоваться тегом CData (иначе он вам вообще не нужен) нужно обращаться к его свойсву nodeValue, а не методу toString()/valueOf(). Иначе вы естественно получите то, что получаете =)
__________________
Hell is the possibility of sanity