0

私は XML と XSLT の初心者です。私は XSL を書こうとしています。しかし、私の xsl で xml ドキュメントの属性に対処する方法がわかりません。

これが私のサンプルxmlです。

  <Books>
  <Book Cover="Paper back">
<Isbn>AS-1-4652-05128-2</Isbn>
<Title>Advanced Computing Theory</Title>
<Author>
  <Name>
    <First>John</First>
    <Last>Grisham</Last>
  </Name>
  <Contact Office="str1234">
    <Phone>782-999-1212</Phone>
  </Contact>
</Author>
<Publisher>Kendall Hunt</Publisher>
<Year Edition="2">
  <Year>1980</Year>
</Year>

そして、ここに私のXSLドキュメントがあります:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    version="1.0">
    <xsl:template match="/">
        <html> <body>
            <h1>Books</h1>
            <table border="1">
                <tr bgcolor="yellow">
                        <td><b>ISBN </b></td>
                        <td><b>Title</b></td>
                        <td><b>Author</b></td>
                        <td><b>Publisher</b></td>
                        <td><b>Year and Edition</b></td>
                </tr>
    <xsl:for-each select="Books/Book">
            <xsl:sort select="Title" />
            <tr style="font-size: 10pt; font-family: verdana">
                <td><xsl:value-of select="Isbn"/></td>
                <td><xsl:value-of select="Title"/></td>
                <xsl:for-each select="Author">
                <td><xsl:value-of select="First"/>&nbsp;<xsl:value-of select="Last"/> &nbsp;<xsl:value-of select="Phone"/> &nbsp; <xsl:value-of select="@Office"/> </td><!-- Problem here-->
                </xsl:for-each>
                <td><xsl:value-of select="Publisher"/></td>
                <td><xsl:value-of select="Year"/>&nbsp;<xsl:value-of select="@Edition"/> </td>!-- Problem here-->
            </tr>
    </xsl:for-each>
                </table>
    </body> </html>
    </xsl:template>
</xsl:stylesheet>

レンダリングされた (関連する) HTML は次のとおりです。

 <tr style="font-size: 10pt; font-family: verdana">
            <td>AS-1-4652-05128-2</td>
            <td>Advanced Computing Theory</td>
            <td></td><!--Empty-->
            <td>Kendall Hunt</td>
            <td>
               1980
               <!--Empty, No edition!-->
            </td>
         </tr>

細部が欠けていることは知っていますが、それが何であるかを完全に理解することはできません!

4

1 に答える 1

2
<td><xsl:value-of select="First"/>&nbsp;<xsl:value-of select="Last"/> &nbsp;<xsl:value-of select="Phone"/> &nbsp; <xsl:value-of select="@Office"/> </td>

FirstLastName要素の下にあるため、これらはそれぞれ と である必要がName/FirstありName/Lastます。同様に、Phone@Officeは下にContactあるので、 と である必要がContact/PhoneありContact/@Officeます。または、同じ作成者が複数のテンプレートを持っている可能性がある場合は、Contactおそらく別のfor-eachテンプレートを検討する必要があります。

あなたは同様の問題を抱えています

<td><xsl:value-of select="Year"/>&nbsp;<xsl:value-of select="@Edition"/> </td>

whereEditionは の属性Yearなので、 が必要Year/@Editionです。

于 2013-03-28T23:29:26.167 に答える