Here is the xml code
<?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>
Here is the 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>
My problem is why does it not display the wName?
The for-each
changes the XPath scope, so it's looking for wName inside each manifest/item (which is why selecting itemName
works). You can either go back up the tree, by changing the select from "wName" to "../../wName", or alternatively define a variable for the document root at the top of the stylesheet (i.e. outside the for-each):
<xsl:variable name="doc" select="/"/>
Then inside the for each you can do
<xsl:value-of select="$doc/delivery/wName"/>
In your code:
<xsl:for-each select="delivery/wName">
<ul>
<li>
<xsl:value-of select="wName" />
</li>
</ul>
</xsl:for-each>
You want to output the string value of the wName
child of delivery/wName
. However no wName
element has a wName
child.
Solution: Just output the string value of the already current wName
:
Replace:
<xsl:value-of select="wName" />
with
<xsl:value-of select="." />
精彩评论