Для циклов и . apply-templates

Недавно я начал использовать XSLT для некоторых своих XML-документов, и у меня есть несколько вопросов. Я добавляю код ниже. В коде у меня есть шаблон, который соответствует элементам электронной книги. Затем я хочу перечислить всех авторов, написавших книгу. Я делаю это, используя для каждого цикла, но я также могу применить к нему шаблон. Я не вижу четкой линии, когда использовать циклы, а когда использовать шаблоны.

И еще один вопрос, нормально ли просто сказать «применить шаблоны», когда вы теперь, когда не будет других дочерних элементов элемента, в который вы его пишете. В моем случае в шаблоне, который соответствует корню документа, я говорю «применить шаблоны». Затем он находит электронные книги, которые являются его единственным дочерним элементом, но я мог бы иметь элемент «книги», который различал бы «обычные» книги и электронные книги, тогда он просто перечислял бы символьные данные книг. Тогда мне нужно было бы написать apply-templates select = "ebooks", если бы я просто хотел, чтобы электронные книги были в моем окончательном документе. Так это зависит от того, насколько хорошо вы знаете свой документ?

Спасибо, вот мой код (это просто для практики):

XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="ebooks.xsl"?>
<ebooks>
    <ebook>
        <title>Advanced Rails Recipes: 84 New Ways to Build Stunning Rails Apps</title>
        <authors>
            <author><name>Mike Clark</name></author>
        </authors>
        <pages>464</pages>
        <isbn>978-0-9787-3922-5</isbn>
        <programming_language>Ruby</programming_language>
        <date>
            <year>2008</year>
            <month>5</month>
            <day>1</day>
        </date>
        <publisher>The Pragmatic Programmers</publisher>
    </ebook>
    ...

XSLT:

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

    <xsl:template match="/">
        <html>
            <head>
                <title>Library</title>
            </head>
            <body>
                <xsl:apply-templates />            
            </body>
        </html>    
    </xsl:template>

    <xsl:template match="ebooks">
        <h1>Ebooks</h1>
        <xsl:apply-templates>
            <xsl:sort select="title"/>
        </xsl:apply-templates>
    </xsl:template>

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

        <xsl:for-each select="authors/author/name">
            <b><xsl:value-of select="."/>,</b>
        </xsl:for-each>
    </xsl:template>

    <xsl:template match="date">
        <table border="1">
            <tr>
                <th>Day</th>
                <th>Month</th>
                <th>Year</th>
            </tr>
            <tr>
                <td><xsl:value-of select="day"/></td>
                <td><xsl:value-of select="month"/></td>
                <td><xsl:value-of select="year"/></td>
            </tr>
        </table>
    </xsl:template>

</xsl:stylesheet>
16
задан Hash 8 November 2013 в 08:43
поделиться