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/FirstName/Last。同样,Phoneand@Office都在Contactso 应该是Contact/Phoneand之下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 回答