使用xslt从xml生成html

使用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

我是xslt新手,正在尝试使用xslt从xml创建html

我不知道为什么,但是我的xslt在只有一个元素的情况下工作,而在有多个元素的情况下不工作

我尝试了各种方法,但正如我所说的,我是新来的,不知道如何做这一切了

这是我的xml

  <?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[&lt;p&gt;&lt;b&gt;Property Location&lt;/b&gt; &lt;br /&gt;With a stay at Hotel Magenta Paris in Paris (Gare du Nord - Gare de L&apos;Est), you&apos;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&currencyCode=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[&lt;p&gt;&lt;b&gt;Property Location&lt;/b&gt; &lt;br /&gt;With a stay at Hotel Magenta Paris in Paris (Gare du Nord - Gare de L&apos;Est), you&apos;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&currencyCode=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[&lt;p&gt;&lt;b&gt;Property Location&lt;/b&gt; &lt;br /&gt;With a stay at Hotel Magenta Paris in Paris (Gare du Nord - Gare de L&apos;Est), you&apos;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&currencyCode=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不起作用。希望这有帮助。非常感谢你的帮助。