Опубликован: 19.07.2010 | Уровень: для всех | Доступ: платный
Самостоятельная работа 3:

Структура XML документа. Программный нтерфейс XML DOM API

< Лекция 8 || Самостоятельная работа 3: 123 || Лекция 9 >

3. Реализация XSLT преобразования XML документа в XHTML средствами браузера.

  1. Создайте файл ttable.xml следующего содержания:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="ttable.xsl"?>
    <timetable>
        <lesson>
          <timeFrom>09.30</timeFrom>
          <timeTo>11.00</timeTo>
          <subject>Deutsch</subject>
          <teacher>Borisova</teacher>
        </lesson>
        <lesson>
          <timeFrom>11.10</timeFrom>
          <timeTo>12.20</timeTo>
          <subject>SAP Administration</subject>
          <teacher>Petrov</teacher>
        </lesson>
        <lesson>
          <timeFrom>12.40</timeFrom>
          <timeTo>14.00</timeTo>
          <subject>SAP Administration</subject>
          <teacher>Ivanov</teacher>
        </lesson>
        <lesson>
          <timeFrom>14.00</timeFrom>
          <timeTo>15.20</timeTo>
          <subject>Wen-technology</subject>
          <teacher>Loktev</teacher>
        </lesson>
    </timetable>
  2. Подготовьте для него соответствующий файл таблицы стилей ( ttable.xsl ):

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
    <xsl:template match="/">
      <html>
      <body>
        <h2>My academical timetable</h2>
        <table border="1">
        <tr bgcolor="#a5abfa">
          <th align="left">Time From</th>
          <th align="left">Subject</th>
          <th align="left">Teacher</th>
        </tr>
        <xsl:for-each select="timetable/lesson">
        <tr>
          <td><xsl:value-of select="timeFrom"/></td>
          <td><xsl:value-of select="subject"/></td>
          <td><xsl:value-of select="teacher"/></td>
        </tr>
        </xsl:for-each>
        </table>
      </body>
      </html>
    </xsl:template>
    </xsl:stylesheet>

    Первая строка в файле ttable.xml вида:

    <?xml-stylesheet type="text/xsl" href="ttable.xsl"?>

    представляет собой ссылку на подходящую таблицу стилей.

    В данном примере для описания шаблона был использован элемент <xsl:template> .

    Атрибут match применяется для связывания XML элемента с шаблоном. Значение атрибута match является выражение XPath. В данном случает match="/" указывает на весь документ.

    Содержимое элемента <xsl:template> описывает фрагмент HTML кода в выходном документе. Элемент <xsl:value-of> может быть использован для извлечения значения XML элемента и добавления его в выходной поток при преобразовании. Значение атрибута select является выражением XPath, которое напоминает нотацию, используемую в файловой системе; знак (/) указывает на обращение к подкаталогу.

    Элемент <xsl:for-each> позволяет выбирать каждый элемент XML указанного множества узлов.

  3. При наличии подходящего браузера можно будет увидеть следующий результат после загрузке файла ttable.xml:


    Для фильтрации вывода элементов можно добавить атрибут элемента <xsl:for-each> , задающий критерий отбора элементов. Например:

    <xsl:for-each select="timetable/lesson[subject='SAP Administration']">

    Проверьте работу данного фильтра.

    Допустимо использование следующих операторов для описания фильтра:

    • = (равно)
    • != (не равно)
    • &lt; (меньше чем)
    • &gt; (больше чем)

4. Реализация преобразования с помощью JavaScript.

  1. Подготовьте html файл, содержащий код:

    <html>
    <head>
    <script>
    function loadXMLDoc(fname)
    {
    var xmlDoc;
    // Код для IE
    if (window.ActiveXObject)
      {
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
      }
    // Код для Mozilla, Firefox, Opera и др.
    else if (document.implementation 
    && document.implementation.createDocument)
      {
      xmlDoc=document.implementation.createDocument("","",null);
      }
    else
      {
      alert('Your browser cannot handle this script');
      }
    xmlDoc.async=false;
    xmlDoc.load(fname);
    return(xmlDoc);
    }
    
    function displayResult()
    {
    xml=loadXMLDoc("ttable.xml");
    xsl=loadXMLDoc("ttable.xsl");
    // Код для IE
    if (window.ActiveXObject)
      {
      ex=xml.transformNode(xsl);
      document.getElementById("example").innerHTML=ex;
      }
    // Код для Mozilla, Firefox, Opera и др.
    else if (document.implementation 
    && document.implementation.createDocument)
      {
      xsltProcessor=new XSLTProcessor();
      xsltProcessor.importStylesheet(xsl);
      resultDocument = xsltProcessor.transformToFragment(xml,document);
      document.getElementById("example").appendChild(resultDocument);
      }
    }
    </script>
    </head>
    <body id="example" onLoad="displayResult()">
    </body>
    </html>

    Функция loadXMLDoc() загружает XML и XSL файлы в зависимости от типа браузера.

    Функция displayResult() используется для отображения XML файла в стиле, задаваемом XSL файлом. Она выполняет следующие действия:

  2. загружает XML и XSL.
  3. определяет тип браузера.
  4. если браузер поддерживает ActiveX объекты:
    • с помощью метода transformNode() таблица стилей XSL применяется к XML документу.
    • формируется тело текущего документа.
  5. если браузер клиента не поддерживает ActiveX объекты:
    • создается новый объект XSLTProcessor и в него импортируется XSL файл.
    • с помощью метода transformToFragment() таблица стилей XSL применяется к XML документу.
    • формируется тело текущего документа.
  6. Загрузите этот документ в веб-браузере.

5. Реализация преобразования с помощью ASP

  1. Подготовьте файл, содержащий следующий код сценария на языке ASP:

    <%
    'Load XML
    set xml = Server.CreateObject("Microsoft.XMLDOM")
    xml.async = false
    xml.load(Server.MapPath("ttable.xml"))
    
    'Load XSL
    set xsl = Server.CreateObject("Microsoft.XMLDOM")
    xsl.async = false
    xsl.load(Server.MapPath("ttable.xsl"))
    
    'Transform file
    Response.Write(xml.transformNode(xsl))
    %>

    В начале сценария создается экземпляр парсера Microsoft XML parser (XMLDOM) , и XML файл загружается в память. Далее создается еще один экземпляр парсера, и XSL файл загружается в память. В последней строке выполняется собственно преобразование XML файла с использованием XSL файла в XHTML, который отправляется обратно браузеру.

  2. Проверьте работу сценария в веб-браузере.

Контрольное задание

  1. Разработка DTD и XML Schema для XML документа.

    В приведенном ниже XML документе описана экзаменационная ведомость:

    <gradeReport id="120851">
    <date>10-06-2008</date>
    <subject>Computer Science Fundamentals</subject>
    <examiner>prof.Litvinov</examiner>
       <gradeList>
    	<gradeRecord id="1">
    	   <student>Ivanov</student>
    	   <grade>4</grade>
    	</gradeRecord>
    	<gradeRecord id="2">
    	   <student>Petrov</student>
    	   <grade>3</grade>
    	</gradeRecord>
    	<gradeRecord id="3">
    	   <student>Sidorov</student>
    	   <grade>5</grade>
    	</gradeRecord>
       </gradeList>
    </gradeReport>

    Опишите структуру данного документа с помощью DTD схемы и XML Schema. Проверьте обе схемы с помощью соответствующих программ-валидаторов.

  2. Манипулирование деревом XML документа

    В приведенном ниже XML документе описана экзаменационная ведомость:

    <gradeReport id="120851">
    <date>10-06-2008</date>
    <subject>Computer Science Fundamentals</subject>
    <examiner>prof.Litvinov</examiner>
       <gradeList>
    	<gradeRecord id="1">
    	   <student>Ivanov</student>
    	   <grade>4</grade>
    	</gradeRecord>
    	<gradeRecord id="2">
    	   <student>Petrov</student>
    	   <grade>3</grade>
    	</gradeRecord>
    	<gradeRecord id="3">
    	   <student>Sidorov</student>
    	   <grade>5</grade>
    	</gradeRecord>
       </gradeList>
    </gradeReport>
  3. Используя методы DOM XML, сформируйте HTML страницу, содержащую таблицу из трех столбцов: номер, студент, оценка.
  4. Используя методы DOM XML, замените цифровые значения оценок их словесными эквивалентами, например "4" на "good".
  5. В приведенном ниже XML документе описана экзаменационная ведомость:

    <gradeReport id="120851">
    <date>10-06-2008</date>
    <subject>Computer Science Fundamentals</subject>
    <examiner>prof.Litvinov</examiner>
       <gradeList>
    	<gradeRecord id="1">
    	   <student>Ivanov</student>
    	   <grade>4</grade>
    	</gradeRecord>
    	<gradeRecord id="2">
    	   <student>Petrov</student>
    	   <grade>3</grade>
    	</gradeRecord>
    	<gradeRecord id="3">
    	   <student>Sidorov</student>
    	   <grade>5</grade>
    	</gradeRecord>
       </gradeList>
    </gradeReport>

    Постройте для него XSL файл, необходимый для XSLT преобразования исходного XML документа в HTML страницу, содержащую заголовок ведомости и таблицу оценок со столбцами: номер, студент, оценка.

< Лекция 8 || Самостоятельная работа 3: 123 || Лекция 9 >
Наталья Алмаева
Наталья Алмаева
Россия
Андрей Лучицкий
Андрей Лучицкий
Россия