Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распред-ые СОИ.doc
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
591.87 Кб
Скачать

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

type

Возвращает тип элемента. Это свойство может быть использовано для того, чтобы разделить имена тэгов и данные, содержащиеся внутри них. В данной версии анализатора определены следующие типы элементов: 0 - элемент 1 - текст 2 - комментарий 3 - Document 4 - DTD

tagName

Возвращает или устанавливает название тэга(в виде строки с символами, приведенными к верхнему регистру). Названия метатэгов(например, <?xml?>) начинаются с символа ?. Названия тэгов комментариев начинаются с символа !.

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(), который вызывается в цикле столько раз, сколько потомков у текущего элемента. Обработка каждого дочернего элемента осуществляется вызовом этой же функции, в чем и заключается рекурсия.