样式表无法显示wName的问题

时间:2011-07-24 14:18:25

标签: xml xslt

这是xml代码

<?xml-stylesheet type="text/xsl" href="autotxt.xsl" ?>
<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

 <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">             
 <li> 
 <xsl:value-of select="itemName" />             
 </li>             
 </xsl:for-each>         
 </ul>
 <xsl:for-each select="delivery/wName">             
 <ul>              
 <li>
 <xsl:value-of select="wName" />             
 </li>             
 </xsl:for-each>         
 </ul>

 </body> 
 </html> 
 </xsl:template> 
 </xsl:stylesheet>

我的问题是为什么它不显示wName?

2 个答案:

答案 0 :(得分:1)

for-each更改了XPath范围,因此它在每个清单/项目中查找wName(这就是为什么选择itemName有效)。您可以通过将选择从“wName”更改为“../../wName”来返回树,或者在样式表的顶部定义文档根的变量(即,在for-each之外) ):

<xsl:variable name="doc" select="/"/>

然后在每个你可以做的内部

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

答案 1 :(得分:1)

在您的代码中

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

您想输出wName delivery/wName子项的字符串值。但是,wName元素没有wName子元素。

解决方案:只输出当前wName的字符串值:

<强>替换

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

   <xsl:value-of select="." />