П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 182378 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 81843 раз(а).

Учебник HTML.
Просмотров 76894 раз(а).

Руководство по PHP5.
Просмотров 47870 раз(а).

Хостинг через призму DNS.
Просмотров 55474 раз(а).

Подборка текстов стандартных документов.
Просмотров 47345 раз(а).

Учебник PHP - Самоучитель
Просмотров 53824 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 54529 раз(а).

Внешние атаки...
Просмотров 44129 раз(а).

Учебник PHP.
Просмотров 39454 раз(а).

SSI в примерах.
Просмотров 29326 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Объектная модель XML в Internet Explorer 4.0

Перед тем, как использовать свойства и методы анализатора, его необходимо создать. Делается это при помощи стандартного метода, предназначенного для создания ActiveX- объектов:

var mydoc = new ActiveXObject("msxml");

Если ActiveX- компонент был зарегистрирован на Вашей машине(или у Вас установлен броузер Internet Explorer 4), то в результате выполнения этой функции переменной mydoc будет присвоен объект, имеющий тип msxml, свойства и методы которого используются в дальнейшем для получения доступа к структуре XML-документа.

В Приложении 2 приведен полный текст сценария JavaScrtipt, выводящего на экран броузера Internet Explorer 4.0 XML- документ, созданный в Приложении 1. Вы можете использовать этот пример и комментарии к нему в качестве еще одного средства для более быстрого понимания принципов использования свойств и методов объектов Microsoft XML и создания собственных сценариев.

Объектная модель XML- анализатора Microsoft может быть представлена в виде следующего набора внутренних объектов: XML Document, XML Element и Element Collection. Объект XML Document содержит свойства и методы, необходимые нам для работы с XML- документом в целом. XML Element отвечает за работу с каждым из элементов XML- документа. Element Collection представляет из себя набор элементов, доступ к которым доступен при помощи имени или порядкового номера. В следующих примерах мы рассмотрим каждый из этих объектов подробнее.

Свойства и методы документа(объект XML Document)

URL Свойство, доступное для записи и чтения. Задает или возвращает URL обрабатываемого документа. В случае изменения этого свойства текущий документ уничтожается и начинается загрузка нового по указанному URL
root Возвращает корневой элемент XML- документа
charset Свойство, доступное для записи и чтения.Возвращает или устанавливает название текущее кодировочной таблицы согласно требованиям ISO.
version Возвращает номер версии XML
doctype Возвращает содержимое элемента !DOCTYPE
createElement() Метод, позволяющий создать новый элемент, который будет добавлен в качестве дочернего для текущего элемента дерева. В качестве первого параметра задается тип элемента, в качестве второго - название элемента
xml.createElement(0,"new_element")
fileSize Возвращает размер XML- документа. Это свойство в C++ - версии анализатора еще не реализовано
fileModifiedDate Возвращает дату последнего изменения XML- документа. Это свойство в C++ - версии анализатора еще не реализовано
fileUpdatedDate Возвращает дату последнего обновления XML- документа. Это свойство в C++- версии анализатора еще не реализовано
mimeType Возвращает MIME-тип(MIME- Multipurpose Internet Mail Extension, RFC 1341).Это свойство в C++ - версии анализатора еще не реализовано

Ниже приведен фрагмент JavaScript- сценария, использующего эти методы и свойства для вывода информации о текущем документе:

var xmldoc = new ActiveXObject("msxml");
var xmlsrc = "http://localhost/xml/journal.xml";
xmldoc.URL = xmlsrc;
function viewProperties(){
this.document.writeln('<center><table width=90% >');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document URL</td>
<td align="center">'+xmldoc.URL+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document root</td>
<td align="center">'+xmldoc.root+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document doctype</td>
<td align="center">'+xmldoc.doctype+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document version</td>
<td align="center">'+xmldoc.version+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document charset</td>
<td align="center">'+xmldoc.charset+'</td></tr>');
this.document.writeln('</table></center>');
}

Свойства и методы элементов документа

type Возвращает тип элемента. Это свойство может быть использовано для того, чтобы разделить имена тэгов и данные, содержащиеся внутри них. В данной версии анализатора определены следующие типы элементов:
0 - элемент
1 - текст
2 - комментарий
3 - Document
4 - DTD
tagName Возвращает или устанавливает название тэга(в виде строки с символами, приведенными к верхнему регистру). Названия метатэгов(например, &lt;?xml?&gt;) начинаются с символа ?. Названия тэгов комментариев начинаются с символа !.
text Возвращает текстовое содержимое элементов и комментариев.
AddChild() Добавление нового дочернего элемента и всех его потомков в текущую ветвь дерева. В качестве первого параметра этой функции необходимо передать объект типа Element, который затем будет помещен в список дочерних элементов. Также необходимо задать индекс нового элемента в списке и в качестве последнего параметра обязательно передать значение -1. Т.к. в данной модели любой элемент в документе может иметь ссылку только на один родительский элемент, при выполнении данной процедуры у добавляемого объекта старая ссылка на родительский элемент теряется. Используя это свойство, можно перемещать элементы из одного XML- документа в другое, но том случае, если у дочерних ссылок перемещаемого элемента существуют внешние ссылки или сами дочерние элементы ссылаются на внешние возможно возникновение ошибки
elem.addChild(elem.children.item().children.item(0),0,-1)
removeChild() Удаляет дочерний элемент и всех его потомков. Элементы остаются в памяти и могут быть вновь добавлены к дереву при помощи метода addChild().
elem.removeChild(elem.children.item(1))
parent Возвращает указатель на текущий родительский элемент. Ссылки на родительский элемент имеют все элементы, за исключением корневого.
GetAttribute() Возвращает значение указанного атрибута в виде текстовой строки.
elem.getAttribute("color")
SetAttribute() Устанавливает указанный атрибут и его значение. Прежнее значение атрибута теряется
elem.setAttribute("color","red")
removeAttribute() Уничтожает указанный атрибут
elem.removeAttribute("color")
children Возвращает ассоциированный список дочерних элементов(коллекцию). Такой список позволяет приложению получать нужные элементы как по названию, так и по порядковому номеру при помощи метода item(). В том случае, если потомков у текущего элемента нет, функция возвратит null

Пример использования

Вот пример использования описанных функций:

<script language="javascript">
<!--
var xmldoc = new ActiveXObject("msxml");
var xmlsrc = "http://localhost/xml/sample.xml";
function parse(root){
 var i=0;
 if(root.type==0){
  this.document.writeln('<UL>Current tag is '+root.tagName+' 
  (parent is '+root.parent+'). ');
 }else if(root.type==1){
  this.document.writeln('<LI>It is a text of '+root.parent.tagName+' 
  element: <i>'+root.text+'</i></LI>');
 }else{
  this.document.writeln('<br><br>Error');
 }
  if(root.children!=null){
  this.document.writeln('It consist of '+root.children.length+' elements:');
   for(i=0;i<root.children.length;i++){
     parse(root.children.item(i));
   }
  }
else{
     this.document.writeln('</UL>');
  }
}
function viewDocument(){
xmldoc.URL = xmlsrc;
this.document.writeln('<body bgcolor="white">');
this.document.writeln('<p><center><hr width=80%>XML sample page
<hr width=80%></center><p>');
parse(xmldoc.root);
this.document.writeln('</body>');
}
viewDocument();
//-->
</script>

Как видно из примера, в процессе обработки XML- документа необходимо рекурсивно обходить все ветви создаваемого анализатором дерева, причем, на каждом шаге возможны следующие ситуации:

  • Встретился новый элемент. В этом случае его название(задаваемое тэгом) доступно при помощи свойства tagName, а содержимое - свойством text. У любого непустого элемента существует хотя бы один потомок, представляющий собой содержимое этого элемента(в этом отличие представленной объектной модели msxml от реальной структуры документа - в XML под элементом понимается как название тэга, так и текстовое содержимое его)
  • Встретилось текстовое поле. Это поле может быть либо комментарием, либо просто текстом, содержащемся в текущем элементе

Для обработки потомков текущего элемента используется метод item(), который вызывается в цикле столько раз, сколько потомков у текущего элемента. Обработка каждого дочернего элемента осуществляется вызовом этой же функции, в чем и заключается рекурсия.

Использование ASP

Доступ к свойствам XML- анализатора возможен также из сценариев ASP(Active Server Pages), выполняющихся на стороне сервера. Если при написании ASP-модуля используется язык VBscript, то для создания объекта, представляющего XML- документ, необходимо включить следующее выражение:

Set myxml=Server.CreateObject("msxml")

Однако необходимо учитывать, что в качестве сервера в этом случае надо использовать Web- сервер, поддерживающий ISAPI, и так же на компьютере должны быть установлены или броузер Internet Explorer версии 4 и выше, или зарегистрированный в реестре ActiveX- компонент msxml.

Вот пример использования свойств XML-документа в ASP- программе:

<%
Set myxml=Server.CreateObject("msxml")
myxml.url = "http://localhost/xml/sample1.xml"
url=myxml.url
Set root=myxml.root
version=myxml.version
charset=myxml.charset
%>
<html>
<body bgcolor="white">
<center>
<table width=80%>
<tr>
 <td align="center" bgcolor="silver">URL</td>
 <td align="center"><%=url%></td>
</tr>
<tr>
 <td align="center" bgcolor="silver">Version</td>
 <td align="center"><%=version%></td>
</tr>
<tr>
 <td align="center" bgcolor="silver">Root element</td>
 <td align="center"><%=root.tagName%></td>
</tr>
<tr>
 <td align="center" bgcolor="silver">Charset</td>
 <td align="center"><%=charset%></td>
</tr>
</table>
</body>
</html>

Создавая msxml- объект при помощи CreateObject, мы в дальнейшем вызываем его методы и свойства привычным нам способом. Отличается лишь способ вставки полученной информации в HTML- страницу - она генерируется не на стороне клиента, а приходит к нему в уже готовом виде.

В заключение хотелось бы отметить, что рассмотренные способы работы с XML- документами могут применяться для отображения их элементов на экране броузера. Не всегда они являются наиболее эффективными для форматирования текста - для каждого нового документа с измененной структурой требуются частично или полностью переписывать обработчик(в следующем разделе мы попробуем использовать для этих же целей стилевые таблицы XSL). Однако использование JavaScript позволяет уже сегодня разрабатывать реальные Интернет- приложения, использующие встроенный в броузер клиента анализатор в качестве средства для доступа к структурированной информации XML.

[Назад] [Содержание] [Вперед]



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: