|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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 | Возвращает или устанавливает название тэга(в виде строки с символами, приведенными к верхнему регистру). Названия метатэгов(например, <?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- документа необходимо рекурсивно обходить все ветви создаваемого анализатором дерева, причем, на каждом шаге возможны следующие ситуации:
Для обработки потомков текущего элемента используется метод item(), который вызывается в цикле столько раз, сколько потомков у текущего элемента. Обработка каждого дочернего элемента осуществляется вызовом этой же функции, в чем и заключается рекурсия.
Доступ к свойствам 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). Однако использование Java Script позволяет уже сегодня
разрабатывать реальные Интернет- приложения, использующие встроенный в
броузер клиента анализатор в качестве средства для доступа к
структурированной информации XML.
Содержание
|