XSL样式表没有在最终的网页中显示我想要的内容

时间:2011-07-24 17:04:08

标签: xml xslt

我尝试过几种不同的方式来显示姓名,没有运气联系,所以我希望得到帮助。

这是我的页面

<delivery>
<wName>Reston</wName>
<wContact>John McAdams</wContact>
<orderDate>8/15/2005</orderDate>
<recvDate>8/21/2005</recvDate>
<recvBy>David Hanson</recvBy>
<sCost>385</sCost>
<manifest>
   <item itemID="CM204">
     <itemName>Camshaft (Box 20)</itemName>
     <itemQty>10</itemQty>
     <itemPrice>289.95</itemPrice>
  </item>
  <item itemID="CR201">
     <itemName>Carburetor (Box 25)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>159.95</itemPrice>
  </item>
  <item itemID="CRK310">
     <itemName>Crankshaft (Box 10)</itemName>
     <itemQty>3</itemQty>
     <itemPrice>109.95</itemPrice>
  </item>
  <item itemID="DS503">
     <itemName>Distributor (Box 15)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>125.95</itemPrice>
  </item>
  <item itemID="EC501">
     <itemName>Engine Computer (Box 1)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>414.59</itemPrice>
  </item>
  <item itemID="OP460">
     <itemName>Oil Pump (Box 20)</itemName>
     <itemQty>3</itemQty>
     <itemPrice>214.95</itemPrice>
  </item>
  <item itemID="SP300">
     <itemName>Standard Spark Plugs (Box 100)</itemName>
     <itemQty>10</itemQty>
     <itemPrice>114.45</itemPrice>
  </item>
  <item itemID="SP310">
     <itemName>Delux Spark Plugs (Box 100)</itemName>
     <itemQty>10</itemQty>
     <itemPrice>139.95</itemPrice>
  </item>
  <item itemID="TB261">
     <itemName>Timing Belt (Box 40)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>94.90</itemPrice>
  </item>
  <item itemID="TR301">
     <itemName>Transmission (Box 1)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>310.95</itemPrice>
  </item>
  <item itemID="BA105">
     <itemName>Standard Batteries (Box 12)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>495.40</itemPrice>
  </item>
  <item itemID="BA205">
     <itemName>Security Batteries (Box 4)</itemName>
     <itemQty>3</itemQty>
     <itemPrice>289.95</itemPrice>
  </item>
  <item itemID="BA115">
     <itemName>Delux Batteries (Box 12)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>525.95</itemPrice>
  </item>
  <item itemID="SF305">
     <itemName>Standard Air Filters (Box 16)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>148.25</itemPrice>
  </item>
  <item itemID="FI372">
     <itemName>Fuel Injection Kits (Box 1)</itemName>
     <itemQty>15</itemQty>
     <itemPrice>129.95</itemPrice>
  </item>
  <item itemID="BRK681">
     <itemName>Brake Line Kit (Box 1)</itemName>
     <itemQty>25</itemQty>
     <itemPrice>29.95</itemPrice>
  </item>
  <item itemID="CF401">
     <itemName>Cooling Fans (Box 20)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>34.41</itemPrice>
  </item>
  <item itemID="ALT561">
     <itemName>Chrome-plated Alternators (Box 5)</itemName>
     <itemQty>3</itemQty>
     <itemPrice>105.95</itemPrice>
  </item>
  <item itemID="ALT610">
     <itemName>Alternator Case Kit (Box 1)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>69.95</itemPrice>
  </item>
  <item itemID="CC310">
     <itemName>Catalytic Converters (Box 5)</itemName>
     <itemQty>3</itemQty>
     <itemPrice>121.59</itemPrice>
  </item>
  <item itemID="CC315">
     <itemName>Universal Catalytic Converters (Box 5)</itemName>
     <itemQty>5</itemQty>
     <itemPrice>68.95</itemPrice>
  </item>
 </manifest>
 </delivery>

这是XSL样式表

 <?xml-stylesheet type="text/xsl"     
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" version="4.0"/>
 <xsl:template match="/">
 <html>
 <head>
 <title>Election Night Results</title>
 <link href="autotxt.css" rel="stylesheet" type="text/css"/>
 </head>
 <body>
 <ul>
 <xsl:for-each select="delivery/manifest/item">
 <xsl:for-each select="delivery/wName">
 <li>
 <xsl:value-of select="wName"/>
 <xsl:value-of select="itemName"/>
 </li>
 </xsl:for-each>
 </ul>
 </body>
 </html>
 </xsl:template>
 </xsl:stylesheet>

2 个答案:

答案 0 :(得分:0)

你的XML很好。我已经纠正了你的XSL中的一些错误。试试这个:

<?xml-stylesheet type="text/xsl"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0"/>
<xsl:template match="/">
<html>
<head>
<title>Election Night Results</title>
<link href="autotxt.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<p><strong>wName:</strong><xsl:value-of select="/delivery/wName"/></p>
<p><strong>wContact:</strong><xsl:value-of select="/delivery/wContact"/></p>
<h2>Parts</h2>
<table>
<tr>
    <th>Item</th>
    <th>Quantity</th>
    <th>Price</th>
</tr>
<xsl:for-each select="/delivery/manifest/item">
<tr>
    <td><xsl:value-of select="itemName"/></td>
    <td><xsl:value-of select="itemQty"/></td>
    <td><xsl:value-of select="itemPrice"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

这一行:

<xsl:value-of select="/delivery/wName"/>

从您指定的传递元素中选择wName元素作为根元素。

这一行:

<xsl:for-each select="/delivery/manifest/item">

告诉XSL解释器循环遍历/ delivery / manifest

中的每个item元素

这一行:

<li><xsl:value-of select="itemName"/></li>

将ltemName元素中的文本节点输出到li html元素中。因为您位于选择/ delivery / manufest / item元素的foreach元素中,所以您只需要在item元素中提供要输出的元素的名称,在本例中为itemName。

这一行告诉解释器停止循环:

</xsl:for-each>

希望这有帮助吗?

答案 1 :(得分:0)

您的代码表明您还没有理解上下文在XSLT和XPath中的工作方式。当您使用xsl:for-each时,select表达式选择的每个节点都将成为上下文节点,用于评估循环中的其他路径表达式。

所以当你这样写:

<xsl:for-each select="delivery/manifest/item">
 <xsl:for-each select="delivery/wName">
 <li>
 <xsl:value-of select="wName"/>

第2行开始寻找一个传递元素,它是前一行中选择的item元素的子元素,而第4行开始寻找wName元素,该元素是第2行中选择的wName元素的子元素。这很明显不是你想要的。第2行应该以“/ delivery”开头,从树的根目录中选择,而第4行应该使用“select =”。“来选择上下文项而不是它的子项。