#html #css #xml #xslt
#HTML #CSS #xml #xslt
Вопрос:
Это общее описание, я застрял в пункте 5. Я попробовал с for-each, создание идентификатора и применение шаблона, похоже, не сработали для меня, не зная, где я упускаю. Мне просто нужно выполнить 5-й пункт, нужно заполнить пункт№, описание и количество, я не знаю, как это сделать, так как это своего рода вложенный xml.Может кто-нибудь, пожалуйста, помочь с этим, я новичок в веб-технологиях, пытаюсь учиться. Прикрепляю свой код ниже.
Перейдите в файл camping.xsl в текстовом редакторе и начните создавать таблицу стилей XSLT. Джон хочет, чтобы отчет включал следующие функции:
- Название магазина в качестве основного заголовка.
- Таблица идентификаторов клиентов, содержащая имя, адрес и идентификатор каждого клиента, с клиентами, перечисленными в алфавитном порядке по имени клиента.
- Таблицы заказов следуют за каждой таблицей идентификаторов клиентов с информацией о заказе для этого клиента; таблицы заказов перечислены в порядке убывания по идентификатору заказа.
- Каждая таблица заказов должна содержать дату заказа и идентификатор заказа.
- В каждой таблице заказов должны быть перечислены товары, приобретенные вместе с товарами, приобретенными в наибольших количествах, перечисленных первыми. Если два продукта имеют одинаковое количество заказанных товаров, продукты должны быть расположены в алфавитном порядке по идентификатору товара.
это тот самый campingtxt.xml файл
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;?xml-stylesheet type="html" href="campingtxt.html"?gt; lt;customers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"gt; lt;?xml-stylesheet type="html" version="2.0" href="campingtxt.xsl"?gt; lt;customer cid="c5781"gt; lt;namegt;Hardy, Joanlt;/namegt; lt;streetgt;105 Terrace Rd.lt;/streetgt; lt;citygt;Duncanlt;/citygt; lt;stategt;NElt;/stategt; lt;zipgt;68634lt;/zipgt; lt;ordersgt; lt;order oid="51170"gt; lt;dategt;8/2/2017lt;/dategt; lt;item iid="p5148"gt; lt;descriptiongt;Self-Inflating Padlt;/descriptiongt; lt;qtygt;2lt;/qtygt; lt;/itemgt; lt;item iid="sb2818"gt; lt;descriptiongt;Down Sleeping Baglt;/descriptiongt; lt;qtygt;2lt;/qtygt; lt;/itemgt; lt;item iid="t7815"gt; lt;descriptiongt;2 Person Tentlt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;/ordergt; lt;order oid="52811"gt; lt;dategt;8/11/2017lt;/dategt; lt;item iid="led7331"gt; lt;descriptiongt;LED Rechargeable Lanternlt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="wp0312"gt; lt;descriptiongt;Water Purifierlt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;/ordergt; lt;/ordersgt; lt;/customergt; lt;customer cid="c5391"gt; lt;namegt;Evans, Terrylt;/namegt; lt;streetgt;641 Greenway Blvd.lt;/streetgt; lt;citygt;Mount Hopelt;/citygt; lt;stategt;OHlt;/stategt; lt;zipgt;44660lt;/zipgt; lt;ordersgt; lt;order oid="52517"gt; lt;dategt;8/1/2017lt;/dategt; lt;item iid="wb7133"gt; lt;descriptiongt;Insulated Water Bottlelt;/descriptiongt; lt;qtygt;2lt;/qtygt; lt;/itemgt; lt;item iid="gps1015"gt; lt;descriptiongt;Zendo GPS meterlt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="bl2815"gt; lt;descriptiongt;Boot Laces (Medium)lt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="tr8140"gt; lt;descriptiongt;Trail Mix (Pouch)lt;/descriptiongt; lt;qtygt;5lt;/qtygt; lt;/itemgt; lt;item iid="fa8442"gt; lt;descriptiongt;First Aid Kit (Pack Size)lt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="bb7117"gt; lt;descriptiongt;Blister Patcheslt;/descriptiongt; lt;qtygt;3lt;/qtygt; lt;/itemgt; lt;/ordergt; lt;order oid="53003"gt; lt;dategt;8/5/2017lt;/dategt; lt;item iid="hp7814"gt; lt;descriptiongt;Fiberglass Light Hiking Poles (Spring Adj.)lt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;/ordergt; lt;order oid="54814"gt; lt;dategt;8/6/2017lt;/dategt; lt;item iid="sb6601"gt; lt;descriptiongt;Solar Battery Recharging Unitlt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="br9002"gt; lt;descriptiongt;Bug Repellent (Deep Woodes)lt;/descriptiongt; lt;qtygt;2lt;/qtygt; lt;/itemgt; lt;item iid="sb8502"gt; lt;descriptiongt;Sunblock SPF 30 (Hiking Size)lt;/descriptiongt; lt;qtygt;6lt;/qtygt; lt;/itemgt; lt;/ordergt; lt;/ordersgt; lt;/customergt; lt;customer cid="c5614"gt; lt;namegt;Sandoval, Tammylt;/namegt; lt;streetgt;641 Greenway Blvd.lt;/streetgt; lt;citygt;Galesburglt;/citygt; lt;stategt;NDlt;/stategt; lt;zipgt;58035lt;/zipgt; lt;ordersgt; lt;order oid="52144"gt; lt;dategt;8/3/2017lt;/dategt; lt;item iid="sg8128"gt; lt;descriptiongt;Polarized Snow Goggleslt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="sh5591"gt; lt;descriptiongt;Snow Helmet Women'slt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="sb5317"gt; lt;descriptiongt;Attack Snowboard Women'slt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="pw6558"gt; lt;descriptiongt;Insulated Pants Women'slt;/descriptiongt; lt;qtygt;2lt;/qtygt; lt;/itemgt; lt;item iid="pj5199"gt; lt;descriptiongt;Insulated Jacket Women'slt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="bl6638"gt; lt;descriptiongt;Snowboard Leashlt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;/ordergt; lt;order oid="53410"gt; lt;dategt;8/6/2017lt;/dategt; lt;item iid="ws6832"gt; lt;descriptiongt;Snowshoes Women'slt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;item iid="sp5588"gt; lt;descriptiongt;Snowshoes Pairlt;/descriptiongt; lt;qtygt;1lt;/qtygt; lt;/itemgt; lt;/ordergt; lt;/ordersgt; lt;/customergt; lt;/customersgt;
Css file /* Default styles */
* { margin: 0px; list-style: none; } header, section, article { display: block; } /* Body styles */ body { font-family: Verdana, Geneva, sans-serif; background-color: white; } div#wrap { background-color: white; margin: 0px auto; width: 780px; border-left: 1px solid rgb(151, 151, 151); border-right: 1px solid rgb(151, 151, 151); box-shadow: rgb(191, 191, 191) 10px 0px 30px, rgb(191, 191, 191) -10px 0px 30px; } header { background-color: rgb(120, 157, 40); padding: 5px; } header h1 { font-size: 2.4em; color: rgb(150, 187, 60); text-shadow: black 1px 1px 1px, white 0px -2px 0px; margin-left: 20px; } section { margin-top: 10px; margin-left: 20px; } section h1 { font-size: 1.8em; color: rgb(51, 51, 51); text-shadow: rgb(150, 187, 60) 1px 1px 4px; margin: 0px 0px 30px 0px; } table.cdata { border-collapse: collapse; border: 1px solid rgb(151, 151, 151); background-color: rgb(231, 231, 231); font-size: 0.8em; margin-top: 10px; margin-bottom: 30px; } table.cdata th { text-align: left; background-color: rgb(191, 191, 191); border: 1px solid rgb(101, 101, 101); padding: 3px; width: 100px; font-weight: normal; vertical-align: top; } table.cdata td { text-align: left; width: 250px; border: 1px solid rgb(101, 101, 101); padding: 3px; vertical-align: top; } article { border-bottom: 1px solid rgb(111, 151, 71); padding-bottom: 15px; } span { color: rgb(131, 131, 131); } table.items span.oid { float: right; } table.items span.date { float: left; } table.items tr { clear: both; } table.items { border-collapse: collapse; border: 1px solid rgb(191,211, 171); font-size: 0.8em; margin-top: 8px; } table.items td, table.items th { border: 1px solid rgb(151, 151, 151); padding: 3px 7px; } table.items thead tr:last-of-type th { font-weight: normal; background-color: rgb(191, 191, 191); } table.items tbody tr:nth-child(even) { background-color: rgb(231, 255, 211); } table.items tr td:nth-child(1) { width: 100px; } table.items tr td:nth-child(2) { width: 350px; } table.items tr td:nth-child(3) { width: 50px; text-align: right; }
This is my campingtxt.xsl stylesheet which has to be converted to a html page
lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"gt; lt;xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes" /gt; lt;xsl:template match="/"gt; lt;htmlgt; lt;headgt; lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /gt; lt;titlegt;Customer Orders at Cairn Campinglt;/titlegt; lt;link href="cstyles.css" rel="stylesheet" type="text/css" /gt; lt;/headgt; lt;bodygt; lt;div id="wrap"gt; lt;headergt; lt;h1gt;Cairn Camping Storelt;/h1gt; lt;/headergt; lt;sectiongt; lt;h1gt;Customer Orderslt;/h1gt; lt;articlegt; lt;xsl:for-each select="customers/customer"gt; lt;xsl:sort select="name" /gt; lt;table class="cdata"gt; lt;trgt; lt;thgt;Namelt;/thgt; lt;tdgt; lt;xsl:value-of select="name" /gt; lt;/tdgt; lt;/trgt; lt;trgt; lt;thgt;Addresslt;/thgt; lt;tdgt; lt;xsl:value-of select="street"/gt; lt;brgt; lt;xsl:value-of select="city" /gt; , lt;xsl:value-of select="state" /gt; lt;/brgt; lt;brgt; lt;xsl:value-of select="zip" /gt; lt;/brgt; lt;/tdgt; lt;/trgt; lt;trgt; lt;thgt;Customer IDlt;/thgt; lt;tdgt; lt;xsl:value-of select="@cid" /gt; lt;/tdgt; lt;/trgt; lt;/tablegt; lt;xsl:for-each select ="orders/order"gt; lt;xsl:sort select="@oid" order="descending" /gt; lt;table class="items"gt; lt;theadgt; lt;trgt; lt;th colspan="3"gt; lt;span class="date"gt; lt;xsl:value-of select="date" /gt; lt;/spangt; lt;span class="oid"gt; lt;xsl:value-of select="@oid" /gt; lt;/spangt;lt;/thgt; lt;/trgt; lt;trgt; lt;thgt;Item No.lt;/thgt; lt;tdgt;lt;xsl:value-of select="iid" /gt; lt;/tdgt; lt;thgt;Descriptionlt;/thgt; lt;tdgt;lt;xsl:value-of select="description" /gt; lt;/tdgt; lt;thgt;Qtylt;/thgt; lt;tdgt;lt;xsl:value-of select="qty" /gt; lt;/tdgt; lt;/trgt; lt;/theadgt; lt;tbodygt; lt;trgt; lt;/trgt; lt;/tbodygt; lt;/tablegt; lt;/xsl:for-eachgt; lt;/xsl:for-eachgt; lt;/articlegt; lt;/sectiongt; lt;/divgt; lt;/bodygt; lt;/htmlgt; lt;/xsl:templategt; lt;/xsl:stylesheetgt;
Ответ №1:
Сделайте это последним tbody
(который в настоящее время выводит одну пустую строку с lt;tbodylt;trgt;lt;/trgt;lt;/tbodygt;
) item
вместо этого выведите s:
lt;tbodygt; lt;xsl:for-each select="item"gt; lt;xsl:sort select="qty" data-type="number" order="descending"/gt; lt;xsl:sort select="description"/gt; lt;trgt; lt;tdgt; lt;xsl:value-of select="@iid"/gt; lt;/tdgt; lt;tdgt; lt;xsl:value-of select="description"/gt; lt;/tdgt; lt;tdgt; lt;xsl:value-of select="qty"/gt; lt;/tdgt; lt;/trgt; lt;/xsl:for-eachgt; lt;/tbodygt;
Кроме того, я не думаю , что в предыдущем thead
, вы хотите шесть столбцов, вы хотите три, с именами, например
lt;trgt; lt;thgt;Item No.lt;/thgt; lt;thgt;Descriptionlt;/thgt; lt;thgt;Qtylt;/thgt; lt;/trgt;
Комментарии:
1. Большое спасибо, что вы внесли свой вклад в мой код, решили вопрос именно так, как мне было нужно, и еще раз спасибо за то, что точно указали, что нужно сделать.