cvc-elt.1 в уроке 5, новые перспективы - PullRequest
0 голосов
/ 30 июня 2018

Для моего онлайн-класса по XML мне было поручено завершить этот урок.

Дженна работает над созданием библиотеки DVD, где она может перечислить все имеющиеся у нее DVD. Некоторые из них она купила сама, другие были подарками от ее мамы, папы, сестры, дедушки и бабушки. Корневым элементом для ее библиотеки является dvdlibrary с одним или несколькими элементами dvd. У каждого DVD есть название, описание, год, компания, любимые персонажи, любимые бонусы и информация о покупке. Каждый из элементов персонажа имеет один или несколько элементов персонажа. Каждый из ее бонусных элементов имеет одну или несколько функций. Ее купленные элементы имеют цену, местоположение и дату. Элемент dvd имеет два атрибута, бонусный элемент имеет один атрибут, а купленный элемент не имеет атрибутов. Дженна хочет создать таблицу стилей XSLT, чтобы использовать ее для привлекательного отображения информации о коллекции DVD. Она уже создала таблицу стилей CSS для этой страницы.

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

  1. С помощью текстового редактора откройте файл dvdlibrary.txt. Просмотрите содержимое, чтобы ознакомиться со структурой файла XML.
  2. Добавьте комментарий в прологе с описанием файла, вашим именем, датой и именем файла.
  3. Сохраните файл как dvdlibrary.xml.
  4. Добавьте инструкцию обработки после секции комментариев, которая присоединяет таблицу стилей dvdlibrary.xsl к этому документу XML. Закройте файл, сохранив ваши изменения.
  5. Используя ваш текстовый редактор, откройте файл dvdlibrarytxt.xsl. Введите свое имя и дату в разделе комментариев к файлу и сохраните его как dvdlibrary.xsl.
  6. Перейдите в файл dvdlibrary.xsl в текстовом редакторе и перейдите в корневой шаблон. Добавьте в шаблон следующие команды:

    <html>
    <head>
    <title>Jenna's DVD Collection</title>
    <link href="dvdlibrarystyles.css"
    rel="stylesheet" type="text/css" />
    </head>
    <body>
    <header>
    <h1>Jenna's DVD Collection</h1>
    </header>
    </body>
    </html>
    
  7. В корневом шаблоне непосредственно над тегом </body> введите следующее:

    <section>
    <h1>DVD List</h1>
    dvd template
    </section>
    

    где шаблон dvd применяет шаблон для пути dvdlibrary / dvd, отсортированный по элементу title.

  8. Создайте шаблон для элемента dvd для отображения информации о каждом фильме. Добавьте следующий HTML-код в шаблон:

    <article>
    </article>
    
  9. В тегах <article></article> введите следующее, чтобы отобразить заголовок и список символов для каждого DVD:

    <h1>title</h1>
    <h2>Featuring: [character] [character] …</h2>
    

    где title - это значение элемента title, а [персонаж] [символ]… - список символов в фильме. (Подсказка: используйте инструкцию for-each для прохождения каждого символьного элемента в пути символов / символов.)

  10. Под заголовком h2 включить следующее:

    <p>
          Bonus Features:
    <span>
    feature/feature/ …
    </span>
    </p>
    

    где feature / feature /… - список значений характеристик в пределах пути бонуса / функции, разделенных символом «/». (Подсказка: используйте инструкцию for-each с путем бонус / признак и отобразите значение узла контекста в элементе for-each.)

  11. Под закрывающим тегом </p> вставить следующую таблицу:

    <table>
    <tr>
    <th>Price</th>
    <th>Location</th>
    <th>Date</th>
    </tr>
    <tr>
    <td>price</td>
    <td>location</td>
    <td>date</td>
    </tr>
    </table>
    

    где цена, местоположение и дата - это значения элементов цены, местоположения и даты.

  12. Сохраните ваши изменения в файле.

  13. Создайте результирующий документ, используя редактор XML или веб-браузер. Убедитесь, что макет и содержимое каждого элемента соответствуют приведенным на рисунке ниже:

  14. Отправьте заполненные файлы своему инструктору.

И, похоже, у меня все еще есть проблема с кодом, и я попытался добавить лист XSD, где я объявил все элементы, но это не сработало.

Это то, что я имею до сих пор:

Это мой XML:

<?xml version="1.0" encoding="UTF-8"?>

<!--
This document contains data about Jenna's DVD library. 

Author: Julia Turek
Date: 6/25/2018

Filename: dvdlibrary.xml
Supporting File: dvdlibrary.xsl
-->

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

<dvdlibrary>  
    <dvd isbn="1-4157-4399-0" from="mom" >
        <title>Kung Fu Lizard</title>
        <description>Jo defends his training academy against the evil Mighty Moose, Benny.</description>
        <year>2011</year>
        <company>Cloud Nine Productions</company>
        <characters>
            <character>Jo, the Kung Fu Lizard</character>
            <character>Lisa, the Fighting Kricket</character>
            <character>Benny, the Evil Mangler Moose</character>
        </characters>
        <bonus num="2">
            <feature>Kung Fu Academy</feature>
            <feature>Cast Commentary</feature>
        </bonus>
        <purchased>
            <price>19.94</price>
            <location>Best DVDs in Town</location>
            <date>2012-10-03</date>
        </purchased>
    </dvd>

    <dvd isbn="1-5158-4399-0" from="mom">
        <title>Planet of the Ogres</title>
        <description>Bilbo had always dreamt he was from another planet. Now he finds out that he is. Join him as he meets his destiny to save his homeworld.</description>
        <year>2012</year>
        <company>MGM</company>
        <characters>
            <character>Bilbo, future leader of the Ogres</character>
            <character>Kilnary, leader of the invading Tigres</character>
            <character>Wicket, leader of the Morkian army</character>
        </characters>
        <bonus num="3">
            <feature>Making Of Featurette</feature>
            <feature>Theatre Trailers</feature>
            <feature>PC downloadable version</feature>
        </bonus>
        <purchased>
            <price>17.99</price>
            <location>Mallmart</location>
            <date>2013-10-06</date>
        </purchased>
    </dvd>

    <dvd isbn="1-9955-8745-0" from="mom">
        <title>Mountain King</title>
        <description>Freda is the daughter of the Mountain King. As the only heir, will she break with tradition and be the first Mountain Queen?</description>
        <year>2014</year>
        <company>Sunny Entertainment</company>
        <characters>
            <character>Freda, daughter of the Mountain King</character>
            <character>Toru, the Mountain King</character>
            <character>Ella, the Enchanted Advisor</character>
           <character>Bopo, the Monkey Bone Wizard</character>
        </characters>
        <bonus num="2">
            <feature>Cast Commentary</feature>
            <feature>Mountain King Music Video</feature>
        </bonus>
        <purchased>
            <price>14.99</price>
            <location>Movies For Everyone</location>
            <date>2015-11-07</date>
        </purchased>
    </dvd>
</dvdlibrary>

Это мой XSL

<?xml version="1.0" encoding="UTF-8" ?>

<!--
   Project 5
   Tutorial Project

   DVD Library XSLT Style Sheet
   Author: Julia Turek
   Date:   6/28/18

   Filename: dvdlibrary.xsl
-->

<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output method="html"
      doctype-system="about:legacy-compat"
      encoding="UTF-8"
      indent="yes" />

   <xsl:template match="/">
    <html>
        <head>
            <title>Jenna's DVD Collection</title>
            <link href="dvdlibrarystyles.css" rel="stylesheet" type="text/css" />
        </head>
        <body>
            <header>
                <h1>Jenna's DVD Collection</h1>
            </header>
            <section>
                <h1>DVD List</h1>
                <xsl:apply-templates select="dvdlibrary/dvd">
                <xsl:sort select="title" />
                </xsl:apply-templates>

                <xsl:apply-templates select="dvd">
                    <article>    
                        <xsl:for-each select="dvd/title">
                        <h1>
                            <xsl:value-of select="title"/>
                        </h1>
                        </xsl:for-each>                    
                        <xsl:for-each select="chracters/character">
                            <h2>
                                <xsl:value-of select="character"/>
                            </h2>
                        </xsl:for-each>
                        <p>
                            Bonus Features:
                            <span>
                                <xsl:for-each select="bonus/featuress"/>
                            </span>
                        </p>


                        <table>
                            <tr>
                                <th>Price</th>
                                <th>Location</th>
                                <th>Date</th>
                            </tr>
                            <tr>
                                <td>price</td>
                                <td>location</td>
                                <td>date</td>
                            </tr>
                        </table>


                    </article>
                </xsl:apply-templates>

            </section>
        </body>
    </html>

   </xsl:template>

</xsl:stylesheet>

Это мой CSS:

    * {
   margin: 0px;
   list-style: none;
}

header, section, article {
   display: block;
}



/* Body styles */
body {
   background-color: white;
   font-family: Verdana, Geneva, sans-serif;
   margin: 10px auto;
   width: 920px;
}

header h1 {
   color: white;
   font-size: 2.8em;
   font-weight: normal;
   text-shadow: rgb(90, 127, 0) 0px 0px 25px;
}

header h2 {
   font-size: 1.5em;
   font-weight: normal;
   color: rgb(90, 127, 0);
}

section {
   margin-top: 25px;
}

section > h1 {
   font-weight: normal;
   font-size: 1.9em;
}

article {
   border: 1px solid black;
   margin: 10px 10px;
   padding: 10px;
   width: 400px;
   float: left;
   box-shadow: rgb(151, 151, 151) 8px 8px 15px;
}

article > h1, article > h2 {
   background-color: rgb(190, 235, 110);
}

article > h1 {
   font-size: 1em;
   font-weight: normal;
   padding: 10px 0px 0px 10px;
}

article > h2 {
   font-size: 0.7em;
   font-weight: normal;
   padding: 0px 0px 10px 10px;
   border-bottom: 1px solid black;
}

article > p {
   font-size: 0.7em;
   margin: 4px 0px 0px 0px;
}

article span {
   color: rgb(151,151, 151);
}

table {
   border-collapse: collapse;
   margin: 10px 0px 5px 0px;
}

td, th {
   border: 1px solid rgb(191, 191, 191);
   font-weight: normal;
   font-size: 0.7em;
   padding: 3px;
   text-align: center;
}

th {
   background-color: rgb(231, 231, 231);
}

Но я продолжаю получать сообщение об ошибке: cvc-elt.1: не удается найти объявление элемента 'dvdlibrary'.

1 Ответ

0 голосов
/ 01 июля 2018

При тестировании вашего XSLT по адресу http://xsltfiddle.liberty -development.net / (что является хорошим местом для тестирования XSLT), данное сообщение об ошибке на самом деле не совпадает с тем, которое вы дали.

Error 1 at line 25:51 : Invalid element <article> within xsl:apply-templates

Ошибка касается этих строк ..

<xsl:apply-templates select="dvd">
    <article>    

Действительно, вы не можете вставлять контент в xsl:apply-templates. Вам, вероятно, нужно сделать <xsl:template match="dvd"> здесь, хотя это нужно переместить, чтобы быть прямым потомком xsl:stylesheet

Также есть несколько проблем с использованием xsl:for-each, хотя ваш текущий код не вызовет никаких ошибок. Но в xsl:for-each любое выражение xpath, которое вы делаете, будет соответствовать текущему элементу, который вы выбрали. Так что вместо этого ...

<xsl:for-each select="chracters/character">
    <h2>
        <xsl:value-of select="character"/>
    </h2>
</xsl:for-each>

Вы должны сделать это (также исправляя написание также ...)

<xsl:for-each select="characters/character">
    <h2>
        <xsl:value-of select="."/>
    </h2>
</xsl:for-each>

В любом случае, попробуйте этот XSLT для начинающих, который вы можете увидеть в действии на http://xsltfiddle.liberty -development.net / eiZQaFj

<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output method="html"
      doctype-system="about:legacy-compat"
      encoding="UTF-8"
      indent="yes" />

   <xsl:template match="/">
    <html>
        <head>
            <title>Jenna's DVD Collection</title>
            <link href="dvdlibrarystyles.css" rel="stylesheet" type="text/css" />
        </head>
        <body>
            <header>
                <h1>Jenna's DVD Collection</h1>
            </header>
            <section>
                <h1>DVD List</h1>
                <xsl:apply-templates select="dvdlibrary/dvd">
                <xsl:sort select="title" />
                </xsl:apply-templates>
            </section>
        </body>
    </html>
   </xsl:template>

    <xsl:template match="dvd">
        <article>    
            <h1>
                <xsl:value-of select="title"/>
            </h1>
            <xsl:for-each select="characters/character">
                <h2>
                    <xsl:value-of select="."/>
                </h2>
            </xsl:for-each>
            <p>
                Bonus Features:
                <xsl:for-each select="bonus/feature">
                    <span>
                        <xsl:value-of select="." />
                    </span>
                </xsl:for-each>
            </p>
        </article>
    </xsl:template>   
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...