использование xslt для преобразования xml в раскладку по категориям - PullRequest
0 голосов
/ 16 мая 2011

У меня есть XML-файл, например, так:

<?xml version="1.0"?>
<BOOKS>
<BOOK category="Book">
    <TITLE image="./images/govnahDesign.jpg">Bible</TITLE>
    <PRICE>0.00</PRICE>
</BOOK> 
<BOOK category="Magazine">
    <TITLE image="./images/govnahDesign.jpg">Auto Mall</TITLE>
    <PRICE>10.00</PRICE>
</BOOK> 
<BOOK category="Magazine">
    <TITLE image="./images/govnahDesign.jpg">LyfeStyle</TITLE>
    <PRICE>40.00</PRICE>
</BOOK>
    </BOOKS>

И я пытаюсь отобразить его так:

Category: Book
   Bible
   <img>
   0.00
---------------------

Category: Magazine
   Auto Mall
   <img>
   10.00

   LyfeStyle
   <img>
   40.00

XSL, который у меня есть, выводитИтак:

Category: Book
   Bible
   <img>
   0.00
---------------------

Category: Magazine
   Auto Mall
   <img>
   10.00
---------------------

Category: Magazine
   LyfeStyle
   <img>
   40.00
---------------------

Вот мой XSL-файл:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">
<xsl:for-each select="BOOKS/BOOK">

Category: <xsl:value-of select="@category"/>

<xsl:for-each select="@category">

<div class="item"><!--div has a float:left-->
    <xsl:value-of select="../TITLE"/>
    <img>
        <xsl:attribute name="src">
            <xsl:value-of select="../TITLE//@image"/>
        </xsl:attribute>
    </img>
    Price: <xsl:value-of select="../PRICE"/><br />
    <button id="view" onclick="javascript:viewProduct()">View</button>
</div>
<hr class="clear"/>
</xsl:for-each>

</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Может кто-нибудь, пожалуйста, укажите мне правильное направление.Спасибо

Ответы [ 2 ]

0 голосов
/ 16 мая 2011

Группировка обычно достигается по методу Менчана.В SO вы найдете много ответов о.Здесь у вас есть одно возможное решение, которое просто внесет небольшое изменение в ваш xsl:

0 голосов
/ 16 мая 2011

Говна,

Не изменяя XML, вы можете пойти по следующему маршруту:

http://www.jenitennison.com/xslt/grouping/muenchian.html

Перебирайте свои книги, но только те, у которых нет «следующего брата», который имеет ту же категорию (то есть первая из этой категории) Затем внутри этого цикла просмотрите книги, соответствующие текущей категории.

Можете ли вы так изменить свой XML? Это не невозможно сделать то, что вы просите, но иногда я нахожу, что настройка XML является более чистым маршрутом.

<?xml version="1.0"?>
<BOOKS>
<CATEGORIES>
  <CATEGORY>Book</CATEGORY>
  <CATEGORY>Magazine</CATEGORY>
</CATEGORIES>
<BOOK category="Book">
    <TITLE image="./images/govnahDesign.jpg">Bible</TITLE>
    <PRICE>0.00</PRICE>
</BOOK> 
<BOOK category="Magazine">
    <TITLE image="./images/govnahDesign.jpg">Auto Mall</TITLE>
    <PRICE>10.00</PRICE>
</BOOK> 
<BOOK category="Magazine">
    <TITLE image="./images/govnahDesign.jpg">LyfeStyle</TITLE>
    <PRICE>40.00</PRICE>
</BOOK> 
</BOOKS>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...