2014-01-04 25 views
0

Я не знаю точно, что не так, или чего не хватает в моем XSLT-файле, результат не отображается, как ожидалось, в котором каждый код вне <html></html> не объявиться!XSLT не отображается должным образом

Я также пытаюсь переключиться с xsl:output method="html" на xsl:output method="xml", он также не работает. Результат показывает только МАГАЗИН КНИГ и ничто другое ниже.

Пожалуйста, дайте мне руку. Спасибо!

Вот файл XSLT

<?xml version="1.0" encoding="utf-8"?><!-- DWXMLSource="books1.xml" --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 


<xsl:template match="/"> 
    <html> 
    <body bgcolor="#fff"> 
    <h1>BOOKS STORE </h1> 

    </body> 

    </html> 
</xsl:template> 

<xsl:template match="ITEM"> 
    <xsl:apply-templates/> 
</xsl:template> 
<xsl:template match="ITEM"> 
    <h3><xsl:value-of select="title"/></h3> 
    <xsl:apply-templates/> 
</xsl:template> 


</xsl:template> 

</xsl:stylesheet> 

Это XML-файл

<?xml version="1.0" encoding="utf-8"?> 
<BOOKS> 
     <ITEM CAT="MMP"> 
     <TITLE>Pride and Prejudice</TITLE> 
     <AUTHOR>Jane Austen</AUTHOR> 
     <PUBLISHER>Modern Library</PUBLISHER> 
     <PUB-DATE>2002-12-31</PUB-DATE> 
     <LANGUAGE>English</LANGUAGE> 
     <PRICE>9</PRICE> 

     </ITEM> 
     <ITEM CAT="P"> 
     <TITLE>Wuthering Heights</TITLE> 
     <AUTHOR>Charlotte Brontë</AUTHOR> 
     <PUBLISHER>Penguin Classics</PUBLISHER> 
     <PUB-DATE>2002-12-31</PUB-DATE> 
     <LANGUAGE>English</LANGUAGE> 
     <PRICE>9.040000000000001</PRICE> 

     </ITEM> 
     <ITEM CAT="P"> 
     <TITLE>Tess of the d'Urbervilles</TITLE> 
     <AUTHOR>Thomas Hardy</AUTHOR> 
     <PUBLISHER>Bantam Classics</PUBLISHER> 
     <PUB-DATE>1984-05-01</PUB-DATE> 
     <LANGUAGE>English</LANGUAGE> 
     <PRICE>12.5</PRICE> 

     </ITEM> 
     <ITEM CAT="P"> 
     <TITLE>Jude the Obscure</TITLE> 
     <AUTHOR>Thomas Hardy</AUTHOR> 
     <PUBLISHER>Penguin Classics</PUBLISHER> 
     <PUB-DATE>1998-09-01</PUB-DATE> 
     <LANGUAGE>English</LANGUAGE> 
     <PRICE>7</PRICE> 

     </ITEM> 
     <ITEM CAT="H"> 
     <TITLE>The Big Over Easy</TITLE> 
     <AUTHOR>Jasper Fforde</AUTHOR> 
     <PUBLISHER>Hodder &amp; Stoughton</PUBLISHER> 
     <PUB-DATE>2005-07-11</PUB-DATE> 
     <LANGUAGE>English</LANGUAGE> 
     <PRICE>14.55</PRICE> 

     </ITEM> 
     <ITEM CAT="P"> 
     <TITLE>The Eyre Affair</TITLE> 
     <AUTHOR>Jasper Fforde</AUTHOR> 
     <PUBLISHER>Penguin</PUBLISHER> 
     <PUB-DATE>2003-02-25</PUB-DATE> 
     <LANGUAGE>English</LANGUAGE> 
     <PRICE>15</PRICE> 

     </ITEM> 
    </BOOKS> 

ответ

1

Причина вы не получаете никакого дополнительного вывода является то, что у вас нет в этом шаблоне xsl:apply-templates:

<xsl:template match="/"> 
    <html> 
    <body bgcolor="#fff"> 
    <h1>BOOKS STORE </h1> 

    </body> 

    </html> 
</xsl:template> 

Добавьте один так:

<xsl:template match="/"> 
    <html> 
     <body bgcolor="#fff"> 
     <h1>BOOKS STORE </h1> 
     <xsl:apply-templates/> 
     </body> 
    </html> 
</xsl:template> 

У вас также есть дополнительные </xsl:template>.

Другое дело, что у вас есть неоднозначные совпадения шаблонов для ITEM. Вам нужно будет использовать только один.

Ваша таблица стилей должна выглядеть примерно так:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> 

    <xsl:template match="/"> 
     <html> 
      <body bgcolor="#fff"> 
       <h1>BOOKS STORE </h1> 
       <xsl:apply-templates/> 
      </body>   
     </html> 
    </xsl:template> 

    <xsl:template match="ITEM"> 
     <h3><xsl:value-of select="TITLE"/></h3> 
     <xsl:apply-templates/> 
    </xsl:template> 

</xsl:stylesheet> 

Обратите внимание, что поскольку вы соответствие ITEM, а затем делать в xsl:apply-templates, вы получите выход Одинаковые названия. Вы также получите текст из всех других элементов в ITEM из-за XSLT built-in rules.

Это должно по крайней мере начать. Задайте больше вопросов, если они появятся.

+0

Спасибо большое, Даниил! Я копирую ваш код и вставляю его, но детали 'TITLE' не отображаются. Есть идеи? –

+0

Избавьтесь от первого шаблона, соответствующего ITEM. Вы почти наверняка не хотите, чтобы два шаблона соответствовали одному и тому же. Во втором случае помните, что XML чувствителен к регистру. Вы хотите обрабатывать TITILE, а не заголовок. – keshlam

+0

Да, я пробовал, но TITLE не отображается под текстом книги КНИГИ. Любая идея, почему ??? –

0

Возможно, если бы вы могли показать требуемый выходной XML, это очень поможет.

Я беру здесь очень дикое предположение. Вы хотите перечислить все «TITLE» ниже «МАГАЗИН КНИГ»?

В этом случае, вы можете попробовать

<xsl:template match="/"> 
    <html> 
     <body bgcolor="#fff"> 
      <h1>BOOKS STORE </h1> 
      <xsl:for-each select="//ITEM/TITLE"> 
       <TITLE><xsl:value-of select="."/></TITLE> 
      </xsl:for-each> 
      <xsl:apply-templates/> 
     </body>   
    </html> 
</xsl:template> 
+0

Привет, Джоэл, Да, он работает, и он работает, если я поместил ваш '' ниже ''. Но если я создаю новый 'xsl: template-match' (как предложение Даниэля) и поместил ваш код, он ничего не отобразит ниже КНИГИ МАГАЗИН! Что мне нужно в ''? Если я попробую '', он ничего не отобразит, но BOOKS STORE. Я пытаюсь '', он ничего не показывает, но КНИГА МАГАЗИНА !!! Затем, если я попробую '', журнал BOOKS STORE исчезнет, ​​он покажет результат вашего кода! Пожалуйста, дайте мне руку.Спасибо –

+0

Вы указали свой ввод XML выше. Отправьте требуемый выходной XML. –

Смежные вопросы