我尝试过几种不同的方式来显示姓名,没有运气联系,所以我希望得到帮助。
这是我的页面
<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>
答案 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 =”。“来选择上下文项而不是它的子项。