Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Считывание данных из XML-документа с помощью JavaScript
 
 автор: coloboc66   (14.08.2006 в 12:35)   письмо автору
 
 

Есть файл test.xml

<?xml version="1.0" encoding="iso-8859-1"?> 
<page> 
<image name = "img1.gif" description = "This is image1" size = "100 KB" dimmensions = "440x330x24b">Image1</image> 
<image name = "img2.gif" description = "This is image2" size = "200 KB" dimmensions = "450x330x24b">Image2</image> 
<image name = "img3.gif" description = "This is image3" size = "300 KB" dimmensions = "460x330x24b">Image3</image> 
</page>

Я считываю с него данные с помощью ява-скрипт в файл test.htm

var tableElement = document.createElement("table"); 
    tableElement.border = 1; 
   for (i=0;i<=2;i++)//Здесь вручную указываю количество строк (рисунков) в xml-документе
{
//Здесь формируются строки таблицы
}
А как сделать, чтобы число строк (i) в xml-документе подсчитывалось для организации цикла автоматически (скриптом)?
Спасибо.

   
 
 автор: AlexSol   (14.08.2006 в 13:18)   письмо автору
 
   для: coloboc66   (14.08.2006 в 12:35)
 

думаю циклом while. я во Flash так делаю:

//story - файл хмл
var aNode:XMLNode = story.firstChild
//aNode - первый узел в хмл
var shag:Number = 0;
for (var aNode; aNode != null; aNode=aNode.nextSibling) {
//aNode.nextSibling - переход на следующий узел
data_arr[shag] = aNode.firstChild;
//данные пишутся в массив
shag++;
}

   
 
 автор: coloboc66   (14.08.2006 в 13:31)   письмо автору
 
   для: AlexSol   (14.08.2006 в 13:18)
 

Так это код на ActionScript, что-ли? Какой-то синтаксис непривычный...

   
 
 автор: AlexSol   (14.08.2006 в 13:40)   письмо автору
 
   для: coloboc66   (14.08.2006 в 13:31)
 

да, на ActionScript. на JavaScript, сори, не знаю :(

   
 
 автор: coloboc66   (14.08.2006 в 14:03)   письмо автору
 
   для: AlexSol   (14.08.2006 в 13:40)
 

А где ж тут цикл while()? Я только for() вижу...

   
 
 автор: AlexSol   (14.08.2006 в 14:11)   письмо автору
 
   для: coloboc66   (14.08.2006 в 14:03)
 

сори, не тот код...

var t:XML = new XML('<a1>1</a1><a1>2</a1><a1>3</a1>');
var aNode:XMLNode = t.firstChild;
while (aNode != null) {
    trace(aNode)
    aNode=aNode.nextSibling
}

   
 
 автор: RMW   (14.08.2006 в 15:06)   письмо автору
 
   для: coloboc66   (14.08.2006 в 12:35)
 


<html>
<head>
<script>
var xmldoc = new ActiveXObject("msxml");
xmldoc.URL='test.xml';
var tableElement = document.createElement("table");
for(var i=0;i<xmldoc.root.children.length;i++)
{
  if(xmldoc.root.children.item(i).tagName=='IMAGE')
  {
    //Здесь формируются строки таблицы
  }
}
</script>
</head>
<body>
</body>
</html>

Это вроде тока для IE. Просто доп.пример

А можете написать как вы подключаете\загружаете файл
и т,д.
просто интересна тема.

   
 
 автор: coloboc66   (14.08.2006 в 15:59)   письмо автору
 
   для: RMW   (14.08.2006 в 15:06)
 

Ну не знаю, пока написал так:

xmlObj = xmlDoc.documentElement;
var tableElement = document.createElement("table"); 
    tableElement.border = 1;
for( i=0;i<xmlObj.childNodes.length;i++)
{
//Здесь формируются строки таблицы
}

Наверное есть лучшее решение? Напишите, кто знает. Проблема в том, что я совсем не знаю всех этих childNodes, rowElement, getAttribute(), firstChild и т.д. В моем учебнике по ява-скрипт ничего этого нет. Или это DHTML? Короче- это элементы какого языка и где взять их описание?
to RMW: файл test.xml просто кладу в одну директорию с файлом test.htm Или что вас интересует?

   
 
 автор: AlexSol   (14.08.2006 в 16:20)   письмо автору
 
   для: coloboc66   (14.08.2006 в 15:59)
 

вот что нашел: http://www.quirksmode.org/dom/importxml.html

   
 
 автор: coloboc66   (14.08.2006 в 17:26)   письмо автору
 
   для: AlexSol   (14.08.2006 в 16:20)
 

Хороший пример, но он не работает. Добрый дядя скрипт выложил, а работающий код не показал. Или я его не нашел.

...
var x = xmlDoc.getElementsByTagName('emperor');
...
for (j=0;j<x[0].childNodes.length;j++)//ошибку ИЕ показывает здесь: x[0]- требуется объект
...

   
 
 автор: AlexSol   (14.08.2006 в 17:38)   письмо автору
 
   для: coloboc66   (14.08.2006 в 17:26)
 

не поверишь - все работает. проверь xml.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Untitled Document</title>
</head>

<body>
<div id='writeroot'></div>
<script type="text/javascript">
function importXML()
{
    if (document.implementation && document.implementation.createDocument)
    {
        xmlDoc = document.implementation.createDocument("", "", null);
        xmlDoc.onload = createTable;
    }
    else if (window.ActiveXObject)
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.onreadystatechange = function () {
            if (xmlDoc.readyState == 4) createTable()
        };
     }
    else
    {
        alert('Your browser can\'t handle this script');
        return;
    }
    xmlDoc.load("tt.xml");
    
}

function createTable(){
    var x = xmlDoc.getElementsByTagName('emperor');
    
    var newEl = document.createElement('TABLE');

    newEl.setAttribute('cellPadding',5);
    var tmp = document.createElement('TBODY');
    newEl.appendChild(tmp);
    var row = document.createElement('TR');
    for (j=0;j<x[0].childNodes.length;j++){
        if (x[0].childNodes[j].nodeType != 1) continue;
        var container = document.createElement('TH');
        var theData = document.createTextNode(x[0].childNodes[j].nodeName);
        container.appendChild(theData);
        row.appendChild(container);
    }
    tmp.appendChild(row);
    for (i=0;i<x.length;i++){
        var row = document.createElement('TR');
        for (j=0;j<x[i].childNodes.length;j++){
            if (x[i].childNodes[j].nodeType != 1) continue;
            var container = document.createElement('TD');
            var theData = document.createTextNode(x[i].childNodes[j].firstChild.nodeValue);
            container.appendChild(theData);
            row.appendChild(container);
        }
        tmp.appendChild(row);
    }
    document.getElementById('writeroot').appendChild(newEl);
}
importXML();

</script>

</body>
</html>

   
 
 автор: coloboc66   (14.08.2006 в 18:00)   письмо автору
 
   для: AlexSol   (14.08.2006 в 17:38)
 

Извиняюсь- работает! Я сам- тормоз- неправильно XML-документ оформил...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования