使用xslt从xml生成html
我是xslt新手,正在尝试使用xslt从xml创建html 我不知道为什么,但是我的xslt在只有一个元素的情况下工作,而在有多个元素的情况下不工作 我尝试了各种方法,但正如我所说的,我是新来的,不知道如何做这一切了 这是我的xml使用xslt从xml生成html,html,xml,xslt,Html,Xml,Xslt,我是xslt新手,正在尝试使用xslt从xml创建html 我不知道为什么,但是我的xslt在只有一个元素的情况下工作,而在有多个元素的情况下不工作 我尝试了各种方法,但正如我所说的,我是新来的,不知道如何做这一切了 这是我的xml <?xml version="1.0" encoding="ISO-8859-1"?> <DestinationResults size="1"> <Destination name="Paris, FRA" order="1"&g
<?xml version="1.0" encoding="ISO-8859-1"?>
<DestinationResults size="1">
<Destination name="Paris, FRA" order="1">
<HotelAvailabilityListResults size="10">
<Hotel order="1">
<hotelId>188139</hotelId>
<name>
<![CDATA[ Hotel Magenta Paris ]]>
</name>
<address1>38 Boulevard De Magenta</address1>
<address2/>
<address3/>
<city>Paris</city>
<stateProvince/>
<country>FR</country>
<postalCode>75010</postalCode>
<latitude>48.87203</latitude>
<longitude>2.35995</longitude>
<tripAdvisorRating>4.0</tripAdvisorRating>
<fromDate>10/11/2013</fromDate>
<toDate>10/12/2013</toDate>
<shortDescription>
<![CDATA[<p><b>Property Location</b> <br />With a stay at Hotel Magenta Paris in Paris (Gare du Nord - Gare de L'Est), you'll be minutes from Porte Saint-Martin and close to Louvre Museum. This]]>
</shortDescription>
<thumbNailUrl>
http://origin-images.ian.com/hotels/1000000/890000/889000/888903/888903_22_t.jpg
</thumbNailUrl>
<propertyRating>3.0</propertyRating>
<referenceProximityDistance>-1.0</referenceProximityDistance>
<referenceProximityUnit/>
<HotelProperty>
<promoDescription>Stay 1 nights and save 10% off your stay!</promoDescription>
<ValueAdds>
<valueAdd id="2048">Free Wireless Internet</valueAdd>
</ValueAdds>
<PromoRateInfo>
<displayCurrencyCode>USD</displayCurrencyCode>
<DisplayNightlyRates size="1">
<displayNightlyRate>152.02</displayNightlyRate>
</DisplayNightlyRates>
<displayRoomRate>168.68</displayRoomRate>
<chargeableRoomRateTotal>168.68</chargeableRoomRateTotal>
<chargeableRoomRateTaxesAndFees>16.66</chargeableRoomRateTaxesAndFees>
<taxesOnly>16.66</taxesOnly>
<salesTax>0</salesTax>
<hotelOccupancyTax>0</hotelOccupancyTax>
<nativeCurrencyCode>USD</nativeCurrencyCode>
<NativeNightlyRates size="1">
<nativeNightlyRate>152.02</nativeNightlyRate>
</NativeNightlyRates>
<nativeRoomRate>168.68</nativeRoomRate>
<rateFrequency>B</rateFrequency>
</PromoRateInfo>
<RateInfo>
<displayCurrencyCode>USD</displayCurrencyCode>
<DisplayNightlyRates size="1">
<displayNightlyRate>168.91</displayNightlyRate>
</DisplayNightlyRates>
<displayRoomRate>185.57</displayRoomRate>
<chargeableRoomRateTotal>185.57</chargeableRoomRateTotal>
<chargeableRoomRateTaxesAndFees>16.66</chargeableRoomRateTaxesAndFees>
<taxesOnly>16.66</taxesOnly>
<salesTax>0</salesTax>
<hotelOccupancyTax>0</hotelOccupancyTax>
<nativeCurrencyCode>USD</nativeCurrencyCode>
<NativeNightlyRates size="1">
<nativeNightlyRate>168.91</nativeNightlyRate>
</NativeNightlyRates>
<nativeRoomRate>185.57</nativeRoomRate>
<rateFrequency>B</rateFrequency>
</RateInfo>
</HotelProperty>
<hotelUrl>
http://booking.rated-hotels.co.uk/index.jsp?pageName=hotAvail&cid=409870&hotelID=188139&mode=2&numberOfRooms=1&room-0-adult-total=2&room-0-child-total=0&arrivalMonth=9&arrivalDay=11&departureMonth=9&departureDay=12&showInfo=true&locale=en_US¤cyCode=USD&mcicid=409870.HOTEL.XML.85419
</hotelUrl>
</Hotel>
<Hotel order="2">
<hotelId>188140</hotelId>
<name>
<![CDATA[ Hotel Magenta Paris ]]>
</name>
<address1>38 Boulevard De Magenta</address1>
<address2/>
<address3/>
<city>Paris</city>
<stateProvince/>
<country>FR</country>
<postalCode>75010</postalCode>
<latitude>48.87203</latitude>
<longitude>2.35995</longitude>
<tripAdvisorRating>4.0</tripAdvisorRating>
<fromDate>10/11/2013</fromDate>
<toDate>10/12/2013</toDate>
<shortDescription>
<![CDATA[<p><b>Property Location</b> <br />With a stay at Hotel Magenta Paris in Paris (Gare du Nord - Gare de L'Est), you'll be minutes from Porte Saint-Martin and close to Louvre Museum. This]]>
</shortDescription>
<thumbNailUrl>
http://origin-images.ian.com/hotels/1000000/890000/889000/888903/888903_22_t.jpg
</thumbNailUrl>
<propertyRating>3.0</propertyRating>
<referenceProximityDistance>-1.0</referenceProximityDistance>
<referenceProximityUnit/>
<HotelProperty>
<promoDescription>Stay 1 nights and save 10% off your stay!</promoDescription>
<ValueAdds>
<valueAdd id="2048">Free Wireless Internet</valueAdd>
</ValueAdds>
<PromoRateInfo>
<displayCurrencyCode>USD</displayCurrencyCode>
<DisplayNightlyRates size="1">
<displayNightlyRate>152.02</displayNightlyRate>
</DisplayNightlyRates>
<displayRoomRate>168.68</displayRoomRate>
<chargeableRoomRateTotal>168.68</chargeableRoomRateTotal>
<chargeableRoomRateTaxesAndFees>16.66</chargeableRoomRateTaxesAndFees>
<taxesOnly>16.66</taxesOnly>
<salesTax>0</salesTax>
<hotelOccupancyTax>0</hotelOccupancyTax>
<nativeCurrencyCode>USD</nativeCurrencyCode>
<NativeNightlyRates size="1">
<nativeNightlyRate>152.02</nativeNightlyRate>
</NativeNightlyRates>
<nativeRoomRate>168.68</nativeRoomRate>
<rateFrequency>B</rateFrequency>
</PromoRateInfo>
<RateInfo>
<displayCurrencyCode>USD</displayCurrencyCode>
<DisplayNightlyRates size="1">
<displayNightlyRate>168.91</displayNightlyRate>
</DisplayNightlyRates>
<displayRoomRate>185.57</displayRoomRate>
<chargeableRoomRateTotal>185.57</chargeableRoomRateTotal>
<chargeableRoomRateTaxesAndFees>16.66</chargeableRoomRateTaxesAndFees>
<taxesOnly>16.66</taxesOnly>
<salesTax>0</salesTax>
<hotelOccupancyTax>0</hotelOccupancyTax>
<nativeCurrencyCode>USD</nativeCurrencyCode>
<NativeNightlyRates size="1">
<nativeNightlyRate>168.91</nativeNightlyRate>
</NativeNightlyRates>
<nativeRoomRate>185.57</nativeRoomRate>
<rateFrequency>B</rateFrequency>
</RateInfo>
</HotelProperty>
<hotelUrl>
http://booking.rated-hotels.co.uk/index.jsp?pageName=hotAvail&cid=409870&hotelID=188139&mode=2&numberOfRooms=1&room-0-adult-total=2&room-0-child-total=0&arrivalMonth=9&arrivalDay=11&departureMonth=9&departureDay=12&showInfo=true&locale=en_US¤cyCode=USD&mcicid=409870.HOTEL.XML.85419
</hotelUrl>
</Hotel>
</HotelAvailabilityListResults>
</Destination>
</DestinationResults>
188139
品红大道38号
巴黎
FR
75010
48.87203
2.35995
4
10/11/2013
10/12/2013
http://origin-images.ian.com/hotels/1000000/890000/889000/888903/888903_22_t.jpg
3
-1.0
入住1晚,可享受10%的住宿折扣!
免费无线互联网
美元
152.02
168.68
168.68
16.66
16.66
0
0
美元
152.02
168.68
B
美元
168.91
185.57
185.57
16.66
16.66
0
0
美元
168.91
185.57
B
http://booking.rated-hotels.co.uk/index.jsp?pageName=hotAvail&cid=409870&hotelID=188139&mode=2&numberOfRooms=1&room-0-成人-total=2&room-0-儿童-total=0&arrivalMonth=9&arrivalDay=11&departureMonth=9&departureDay=12&showInfo=true&locale=en_US¤cyCode=USD&mcicid=409870.HOTEL.XML.85419
188140
品红大道38号
巴黎
FR
75010
48.87203
2.35995
4
10/11/2013
10/12/2013
http://origin-images.ian.com/hotels/1000000/890000/889000/888903/888903_22_t.jpg
3
-1.0
入住1晚,可享受10%的住宿折扣!
免费无线互联网
美元
152.02
168.68
168.68
16.66
16.66
0
0
美元
152.02
168.68
B
美元
168.91
185.57
185.57
16.66
16.66
0
0
美元
168.91
185.57
B
http://booking.rated-hotels.co.uk/index.jsp?pageName=hotAvail&cid=409870&hotelID=188139&mode=2&numberOfRooms=1&room-0-成人-total=2&room-0-儿童-total=0&arrivalMonth=9&arrivalDay=11&departureMonth=9&departureDay=12&showInfo=true&locale=en_US¤cyCode=USD&mcicid=409870.HOTEL.XML.85419
我的xslt是
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
<xsl:for-each select="DestinationResults">
<xsl:for-each select="Destination">
<xsl:for-each select="HotelAvailabilityListResults">
<xsl:for-each select="Hotel">
<div style="background-color:teal;color:white;padding:4px">
<span style="font-weight:bold"><xsl:value-of select="name"/></span>
- <xsl:value-of select="city"/>
</div>
<div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
<p><xsl:value-of select="shortDescription"/>.
<span style="font-style:italic">
<xsl:value-of select="address1"/>
</span>.</p>
</div>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
-
。
此xslt适用于上述xml,但当有多个xml格式的酒店订单时(如下面所示),xslt不会产生任何结果
<Hotel order="2">
<hotelId>188139</hotelId>
<name>
<![CDATA[ Hotel Magenta Paris ]]>
</name>
<address1>38 Boulevard De Magenta</address1>
<address2/>
<address3/>
<city>Paris</city>
<stateProvince/>
<country>FR</country>
<postalCode>75010</postalCode>
<latitude>48.87203</latitude>
<longitude>2.35995</longitude>
<tripAdvisorRating>4.0</tripAdvisorRating>
<fromDate>10/11/2013</fromDate>
<toDate>10/12/2013</toDate>
<shortDescription>
<![CDATA[<p><b>Property Location</b> <br />With a stay at Hotel Magenta Paris in Paris (Gare du Nord - Gare de L'Est), you'll be minutes from Porte Saint-Martin and close to Louvre Museum. This]]>
</shortDescription>
<thumbNailUrl>
http://origin-images.ian.com/hotels/1000000/890000/889000/888903/888903_22_t.jpg
</thumbNailUrl>
<propertyRating>3.0</propertyRating>
<referenceProximityDistance>-1.0</referenceProximityDistance>
<referenceProximityUnit/>
<HotelProperty>
<promoDescription>Stay 1 nights and save 10% off your stay!</promoDescription>
<ValueAdds>
<valueAdd id="2048">Free Wireless Internet</valueAdd>
</ValueAdds>
<PromoRateInfo>
<displayCurrencyCode>USD</displayCurrencyCode>
<DisplayNightlyRates size="1">
<displayNightlyRate>152.02</displayNightlyRate>
</DisplayNightlyRates>
<displayRoomRate>168.68</displayRoomRate>
<chargeableRoomRateTotal>168.68</chargeableRoomRateTotal>
<chargeableRoomRateTaxesAndFees>16.66</chargeableRoomRateTaxesAndFees>
<taxesOnly>16.66</taxesOnly>
<salesTax>0</salesTax>
<hotelOccupancyTax>0</hotelOccupancyTax>
<nativeCurrencyCode>USD</nativeCurrencyCode>
<NativeNightlyRates size="1">
<nativeNightlyRate>152.02</nativeNightlyRate>
</NativeNightlyRates>
<nativeRoomRate>168.68</nativeRoomRate>
<rateFrequency>B</rateFrequency>
</PromoRateInfo>
<RateInfo>
<displayCurrencyCode>USD</displayCurrencyCode>
<DisplayNightlyRates size="1">
<displayNightlyRate>168.91</displayNightlyRate>
</DisplayNightlyRates>
<displayRoomRate>185.57</displayRoomRate>
<chargeableRoomRateTotal>185.57</chargeableRoomRateTotal>
<chargeableRoomRateTaxesAndFees>16.66</chargeableRoomRateTaxesAndFees>
<taxesOnly>16.66</taxesOnly>
<salesTax>0</salesTax>
<hotelOccupancyTax>0</hotelOccupancyTax>
<nativeCurrencyCode>USD</nativeCurrencyCode>
<NativeNightlyRates size="1">
<nativeNightlyRate>168.91</nativeNightlyRate>
</NativeNightlyRates>
<nativeRoomRate>185.57</nativeRoomRate>
<rateFrequency>B</rateFrequency>
</RateInfo>
</HotelProperty>
<hotelUrl>
http://booking.rated-hotels.co.uk/index.jsp?pageName=hotAvail&cid=409870&hotelID=188139&mode=2&numberOfRooms=1&room-0-adult-total=2&room-0-child-total=0&arrivalMonth=9&arrivalDay=11&departureMonth=9&departureDay=12&showInfo=true&locale=en_US¤cyCode=USD&mcicid=409870.HOTEL.XML.85419
</hotelUrl>
</Hotel>
188139
品红大道38号
巴黎
FR
75010
48.87203
2.35995
4
10/11/2013
10/12/2013
http://origin-images.ian.com/hotels/1000000/890000/889000/888903/888903_22_t.jpg
3
-1.0
入住1晚,可享受10%的住宿折扣!
免费无线互联网
美元
152.02
168.68
168.68
16.66
16.66
0
0
美元
152.02
168.68
B
美元
168.91
185.57
185.57
16.66
16.66
0
0
美元
168.91
185.57
B
http://booking.rated-hotels.co.uk/index.jsp?pageName=hotAvail&cid=409870&hotelID=188139&mode=2&numberOfRooms=1&room-0-成人-total=2&room-0-儿童-total=0&arrivalMonth=9&arrivalDay=11&departureMonth=9&departureDay=12&showInfo=true&locale=en_US¤cyCode=USD&mcicid=409870.HOTEL.XML.85419
非常感谢您的帮助
问候,,
Jai为每个指令编写嵌套是XSLT初学者最常见的错误。这不是解决问题的方法:从使用模板规则开始,只有当您充分理解了该语言并了解了其有用的情况时,才对每一个模板规则使用 当然,在这种情况下,您也可以通过使用以下路径来简化代码:
<xsl:for-each select="DestinationResults/Destination/HotelAvailabilityListResults/Hotel">
调试这样的问题需要清楚地理解XML树结构,如果正确地缩进XML,就更容易获得这种理解。我不确定你所说的“多个酒店订单”是什么意思——我在你的第二个例子中只看到一个订单。也许问题在于,您的第二个示例没有样式表假设的DestinationResults/Destination/hotelavailabilitystresults包装元素;无论如何,如果它们在那里,那么你就没有展示它们。将代码放在带有match=“Hotel”的模板规则中可以避免这种对包装中存在的内容的依赖。如果数据xml的根标记发生更改,您的select=“TagName”属性可能与任何内容都不匹配,您必须对此进行说明。可能直接在您的body标记中添加模板匹配=“//Hotel”可以解决此问题。感谢您提供的信息。我不想在这里添加整个XML表。因此,假设我有多个酒店订单,我可以理解为什么不希望包含整个XML。不幸的是,不包括它意味着我们看不出哪里出了问题。答案是将问题缩小到一个可以重现问题的大小,但我们不必费力地阅读不相关的细节。我知道我已经包含了两份酒店订单的XML,这就是问题所在。所以在XML中有多个酒店订单,我的xslt不起作用。希望这有帮助。非常感谢你的帮助。