Таблица стилей XSL не отображает то, что я хочу, на последней веб-странице - PullRequest
0 голосов
/ 24 июля 2011

Я пробовал несколько разных способов отображения wName, wContact, но безуспешно, поэтому мне нужна помощь.

Вот моя страница

<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 голосов
/ 24 июля 2011

Ваш код предполагает, что вы не поняли, как работает контекст в 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 начинает поиск элемента доставки, который является дочерним элементом элемента позиции, выбранного в предыдущей строке, а строка 4 начинает поискЭлемент wName, который является дочерним элементом элемента wName, выбранного в строке 2. Это явно не то, что вы намеревались.Строка 2, вероятно, должна начинаться с "/ delivery", чтобы выбрать из корня дерева, а строка 4 должна использовать "select =". ", Чтобы выбрать элемент контекста, а не его дочерний элемент.

0 голосов
/ 24 июля 2011

Ваш 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 циклически проходить через каждый элемент item в / delivery / manifest

И в этой строке:

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

Выводит текстовый узел внутри ltemNameэлемент в элемент HTML.Поскольку вы находитесь внутри элемента foreach, который выбирает элементы / delivery / manufest / item, вам нужно только указать имя элемента в элементе item, который вы хотите вывести, в данном случае itemName.

Эта строка говорит переводчику прекратить зацикливание:

</xsl:for-each>

Надеюсь, это поможет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...