Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Перемещение внутри XML-документа



 

Ниже в листинге 1.33 представлен пример HTML-страницы , которая содержит сценарий для перемещения внутри XML-документа из листинга 1.27 среди узлов в иерархии DOM, начиная с корневого элемента Document. Для каждого узла сценарий отображает имя узла, тип и значение. Сценарий задает отступ для каждого блока информации в узле, чтобы показать его уровень в иерархии. Эту страницу можно использовать, чтобы отобразить узлы для любого XML-документа и лучше узнать, как DOM структурирует узлы для различных типов XML-документов и компонентов документа.

 

<HTML>

<HEAD>

<TITLE>Отображение узлов DOM</TITLE>

<SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD">

/* получить узел Document: */

Document = dsoXML.XMLDocument;

/* передача узла Document функции */

DisplayDIV.innerText = DisplayNodes(Document, 0);

function DisplayNodes(Node, IndentLevel)

{

/* объявить локальные переменные для рекурсии: */

var i;

var DisplayString ="";

/* создание отступа для данного уровня: */

Indent =""; IndentDelta =" ";

For (i=0; i < IndentLevel; ++i)

Indent += IndentDelta;

/* отображение свойств текущего узла: */

DisplayString += Indent + "Имя узла: " + Node.nodeName + "\n"

+ Indent + "Тип узла: " + Node.nodeType+ "\n"

+ Indent + "Тип строки узла: " + Node.nodeTypeString+ "\n"

+ Indent + "Значение узла: " + Node.nodeValue+ "\n\n";

/* отображение атрибутов для каждого из дочерних узлов: */

Indent += IndentDelta;

for (i=0; Node.attributes != null && i < Node.attributes.length; ++i)

DisplayString += Indent + " Имя узла: " + Node.attributes(i).nodeName + "\n"

+ Indent + " Тип узла: " + Node.attributes(i).nodeType + "\n"

+ Indent + " Тип строки узла: " + Node.attributes(i).nodeTypeString + "\n"

+ Indent + " Значение узла: " + Node.attributes(i).nodeValue + "\n\n";

/* отображение каждого из дочерних узлов, не являющихся атрибутами: */

for (i=0; i < Node.childNodes.length; ++i)

DisplayString +=DisplayNodes(Node.childNodes(i), IndentLevel + 1);

/* возврат строки, содержащей результаты: */

return DisplayString;

}

</SCRIPT>

</HEAD>

<BODY>



<XML ID="dsoXML" SRC="Inventory06.xml"></XML>

<H2>Узлы объектной модели XML-документа</H2>

<DIV ID="DisplayDIV"></DIV>

</BODY>

</HTML>

Листинг 1.33

 

В начале сценарий передает узел Document функции DisplayNodes, которая возвращает отображаемую.информацию данного узла и всех его дочерних узлов. Сценарий присваивает отображаемую информацию свойству innerText элемента DIV в разделе BODY страницы, который затем отображает эту информацию:

 

DisplayDIV.innerText = DisplayNodes(Document, 0);

 

Второй параметр функции DisplayNodes задает уровень отступа, используемого при отображении информации узла. Функция DisplayNodes имеет следующую форму записи:

 

function DisplayNodes (Node, IndentLevel)

 

Функция выполняет следующие основные действия:

· Она сохраняет соответствующее количество символов пробелов в переменной Indent, которая используется для создания отступа в начале каждой строки текста узла. Количество символов пробелов определяется значением параметра IndentLevel, передаваемого функции DisplayNodes:

 

/* создание отступа для данного уровня: */

Indent ="";

IndentDelta =" ";

for (i=0; i < IndentLevel; ++i);

Indent += IndentDelta;

 

· Она сохраняет отображаемую информацию для текущего узла - т. е. узла, передаваемого функции DisplayNodes через параметр Node (изначально, узел Document):

 

/* отображение свойств текущего узла: */

DisplayString += Indent + "Имя узла: " + Node.nodeName + "\n"

+ Indent + "Тип узла: " + Node.nodeType + "\n"

+ Indent + "Тип строки узла: " + Node.nodeTypeString + "\n"

+ Indent + "Значение узла: " + Node.nodeValue + "\n\n";



 

При необходимости увидеть дополнительные свойства для каждого узла, их можно добавить в представленный выше фрагмент кода. Можно использовать любые общие свойства узла, приведенные в таблице 5.21. Однако не следует использовать специальные свойства, характерные для определенного узла (они приведены в таблице 5.22 для узлов Document), поскольку они применимы не для всех типов узлов.

· Она сохраняет отображаемую информацию для дочерних узлов Attribute текущего узла. Отступ при этом увеличивается на один уровень, указывая на то, что эти узлы являются дочерними для текущего узла:

 

/* отображение атрибутов для каждого из дочерних узлов: */

Indent += IndentDelta;

for(i=0; Node.attributes != null && i < Node.attributes.length; ++i)

DisplayString += Indent + "Имя узла: " + Node.attributes(i).nodeName + "\n"

+ Indent + "Тип узла: " + Node.attributes(i).nodeType + "\n"

+ Indent + "Тип строки узла: " + Node.attributes(i).nodeTypeString + "\n"

+ Indent + "Значение узла: " + Node.attributes(i).nodeValue + "\n\n";

 

Функция DisplayNodes не отображает дочерний узел Text узла Attribute, поскольку гораздо удобнее получить значение атрибута непосредственно из свойства nodeValue самого узла Attribute.

· Функция DisplayNodes сохраняет отображаемую информацию для каждого дочернего узла, не являющегося атрибутом, осуществляя самостоятельный вызов для каждого из этих узлов. Такой вызов называется рекурсивным:

 

/* отображение каждого из дочерних узлов, не являющихся атрибутами: */

for (i=0; i < Node.childNodes.length; ++i)

DisplayString += DisplayNodes (Node.childNodes(i), IndentLevel + 1);

 

· Функция DisplayNodes завершает свою работу, возвращая строку, содержащую всю информацию об узле:

 

/* возврат строки, содержащей результаты: */

return DisplayString;

 

При отображении страницы в Internet Explorer свойство nodeTypeString содержит тип узла в виде строчных букв. (Так, “Document” и “Processing-Instruction” превращаются в “document” и “processinginstruc-tion”.) Первая часть отображаемых результатов выглядит, как показано на рисунке 53.

Чтобы просмотреть структуру узлов для других XML-документов, нужно отредактировать фрагмент данных страницы. Например, чтобы просмотреть узлы документа Inventory05.xml, необходимо изменить фрагмент данных следующим образом:

 

<XMLID="dsoXML" SRC="Inventory05.xml"></XML>

Рисунок 53. Отображение структуры узлов XML-документа из листинга 1.27

 


Эта страница нарушает авторские права

allrefrs.ru - 2019 год. Все права принадлежат их авторам!