class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

JavaScript

Основы

Введение
Внедрение
Комментарий
Утверждения
Идентификаторы
Типы данных
Литералы
Переменные
Область видимости
Строки
Массивы
Ассоциативные массивы
Выражения и операции
Управляющие операторы
Функции
ООП - объекты
ООП - прототип, наследование
Замыкание
RTTI
Исключения
Объект Math
Объект Global
Объект Number
Регулярные выражения
XML DOM

библиотеки

Справочник по JavaScript

XML DOM

IE реализует xml парсер в виде ActiveX объекта. При создании объекта можно указать одну из следующих строк, определяющих разные версии парсера: "MSXML4.DOMDocument", "MSXML3.DOMDocument", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XmlDom". Но обычно используется последняя строка. Парсер обладает следующими методами и свойствами:

FF как и многие другие браузеры стараются следовать стандартам. Поэтому парсер можно получить через свойство implementation, объекта Document. В данном парсере также есть метод load() для разбора внешних файлов. Для разбора строк, содержащих xml, используется другой объект - DOMParser.

Разбирая xml содержимое, парсеры строят дерево DOM объектов, и возвращают ссылку на объект Document.

Для простоты и переносимости обычно создают отдельный объект, наподобие следующего (скачать упакованную версию xml.js)


var XML = new Object(); 

// пустой документ
XML.newDocument=function (rootTagName, namespaceURL) {

if(document.implementation && // FF следует W3C стандарту
	document.implementation.createDocument){	
	return document.implementation.createDocument("","",null);			
}
else { // IE  
var doc = new ActiveXObject("Microsoft.XmlDom"); 

// проверяем, указано ли в корневом элементе
// используемое пространство имен 
if (rootTagName) {   
  var root; // корневой элемента
  var pref = ""; // префикс пространства имен 
  var lname = rootTagName; // локальное имя

  var p = rootTagName.indexOf(":");   
  if (p != -1) { 
     pref = rootTagName.substring(0, p); 
     lname = rootTagName.substring(p+1); 
  } 

// если урл пространства имен задан, а префикс нет
// назначаем префикс по умолчанию
  if (namespaceURL) {
	if (!pref) pref = "a0"; // как в FF 
  } 
  else pref = ""; // иначе сбрасываем префикс
  
  // создаем корневой элемент с учетом 
  // указанного пространства имен
  if(pref)  
	  root="<"+lname+">";
  else 
	  root="<"+pref+":"+lname+ 
	     "xlmns:"+pref+"='"+namespaceURL+"'/>"; 
  
  doc.loadXML(root);  
} 
return doc; 
}}; 

// синхронная загрузка документа
XML.load=function(url) { 
var doc = XML.newDocument(); 
doc.async = false;   
doc.load(url);       
return doc;          
}; 

// асинхронная загрузка 
XML.loadAsync = function(url, callback) { 
var doc = XML.newDocument(); 

if (document.implementation && // в FF используем событие onload 
		document.implementation.createDocument) { 
doc.onload = function() { callback(doc); }; 
} 	 
else {// IE как в XMLHttpRequest 
doc.onreadystatechange = function() { 
   if (doc.readyState == 4) 
	  callback(doc); 
};} 
 
xmldoc.load(url); 
}; 

// разбор xml строки 
XML.parse = function(text) {
if (window.DOMParser) { // FF       
    return (new DOMParser()). 
          parseFromString(text, "text/xml"); // или "application/xml" 
}
else if (ActiveXObject) {// IE    
    var doc = XML.newDocument(); 
    doc.loadXML(text);           
    return doc;                  
}
};

разбор строки

Xml заголовок в строке не обязателен.


var xmlstr=
	'<?xml version="1.0" ?>'+
	"<root>"+
	   "<el1> hello world</el1>"+
	   "<el2> no hello world</el2>"+
	"</root>";

var xml=XML.parse(xmlstr);

if(xml==null) alert("No XML");
else {
document.write(
   xml.getElementsByTagName("el1").item(0).
   firstChild.nodeValue
);}
Результат:   

загрузка файла

Определим файл demo.xml с содержимым как в предыдущем примере. При этом заголовок обязателен (для IE).

  
xml=XML.load("demo.xml");

if(xml==null) alert("No XML");
else {
document.write(
   xml.getElementsByTagName("el2").item(0).
   firstChild.nodeValue // textContent пока только для FF
);}

Результат:   

качество реализации DOM

Не все браузеры реализуют полностью возможности DOM. Например, в следующем коде было использовано свойство firstChild, потому что IE пока не реализовал стандартное свойство textContent.


xml.getElementsByTagName("el2").item(0).
   firstChild.nodeValue

В FF этот код можно сократить до


xml.getElementsByTagName("el2").item(0).
   textContent

Рейтинг@Mail.ru