2015-10-17 77 views
0

因此,我試圖使用XSLT從兩個不同的XML文件中獲取結果以顯示餐廳評論。我在allRestaurants.xml中提供了餐廳詳細信息,並在allReviews.xml中提供了這些餐廳的所有評論。我目前已經爲每家餐廳存儲了一個標籤,並且評論每個都與一家特定的餐廳相關聯,因此攜帶相同的標籤。我需要建立一個頁面,帶ID 1的餐廳,下面顯示該餐廳的評論。評論與以下完全一樣存儲1。請幫忙。顯示來自Java中兩個不同XML文件的結果

allRestaurants.xml

<restaurants> 
<restaurant> 
    <restaurant_id>1</restaurant_id> 
    <name>The Jackaroo</name> 
    <street_address>107-109 Darlinghurst Road</street_address> 
    <postcode>2011</postcode> 
    <city>Sydney</city> 
    <state>NSW</state> 
    <country>Australia</country> 
    <email>[email protected]</email> 
    <telephone>93322244</telephone> 
    <stars>3</stars> 
</restaurant> 
<restaurant> 
    <restaurant_id>2</restaurant_id> 
    <name>Four Seasons restaurant Sydney</name> 
    <street_address>199 George Street</street_address> 
    <postcode>2000</postcode> 
    <city>Sydney</city> 
    <state>NSW</state> 
    <country>Australia</country> 
    <email>[email protected]</email> 
    <telephone>92503100</telephone> 
    <stars>5</stars> 
</restaurant> 
</restaurants> 

allReviews.xml

<reviews> 
<review id="1"> 
    <restaurant_id>1</restaurant_id> 
    <author_id>1</author_id> 
    <headline>Clean Bare-Bones Hostel</headline> 
    <details> 
     Example text here 
    </details> 
    <rating>3</rating> 
    <date>1388782853</date> 
</review> 
<review id="2"> 
    <restaurant_id>1</restaurant_id> 
    <author_id>3</author_id> 
    <headline>Wouldn't Recommend</headline> 
    <details> 
     Example text here 
    </details> 
    <rating>2</rating> 
    <date>1368748800</date> 
</review> 
<review id="3"> 
    <restaurant_id>2</restaurant_id> 
    <author_id>2</author_id> 
    <headline>Overall I Enjoyed</headline> 
    <details> 
     Example text here 
    </details> 
    <rating>4</rating> 
    <date>1378788850</date> 
</review> 
</reviews> 

我想,也許將它們合併成一個XML文件,像這樣會做的伎倆,但即使是這樣,我m不知道從哪裏開始:

oneHotel.xml

<?xml-stylesheet type="text/xsl" href="oneHotel.xsl"?> 
<list> 
    <entry name="allHotels.xml" /> 
    <entry name="reviews.xml" /> 
</list> 

這是據我在XSLT文檔找來的,我畫一個巨大的空白。我甚至不知道從哪裏開始:

oneHotel.xsl

<xsl:stylesheet version="1.0"  
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html"/> 

<xsl:copy-of name="restaurant" select="document('allRestaurants.xml') 
     /restaurants/restaurant[restaurant_id=1]"/> 
<xsl:copy-of name="reviews" select="document('allReviews.xml') 
     /reviews/review[restaurant_id=1]"/> 

<xsl:template match="/"> 

<xsl:choose> 
    <xsl:when test="document('allRestaurants.xml') 
      /restaurants/restaurant[restaurant_id=1]"/> 
     <h2><xsl:value-of select="name"/></h2> 
</xsl:choose> 
<h2><xsl:value-of select="$restaurant/name"/></h2> 


</xsl:template> 

</xsl:stylesheet> 

回答

1

嘗試以此爲起點:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" encoding="UTF-8"/> 

<xsl:param name="path-to-reviews" select="'allReviews.xml'"/> 

<xsl:key name="review-by-restaurant-id" match="review" use="restaurant_id" /> 

<xsl:template match="/restaurants"> 
    <html> 
     <body> 
      <h1>Restaurant Reviews</h1> 
      <xsl:apply-templates select="restaurant"/> 
     </body> 
    </html> 
</xsl:template> 

<xsl:template match="restaurant"> 
    <h2> 
     <xsl:value-of select="name"/> 
    </h2> 
    <xsl:variable name="id" select="restaurant_id" /> 
    <!-- switch context to lookup document in order to use key --> 
    <xsl:for-each select="document($path-to-reviews)"> 
     <xsl:for-each select="key('review-by-restaurant-id', $id)"> 
      <h3> 
       <xsl:value-of select="headline"/> 
      </h3> 
      <p> 
       <xsl:value-of select="details"/> 
      </p> 
     </xsl:for-each> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

這是假設您指示您的XSLT處理器處理allRestaurants.xml文檔和passi作爲參數的文檔路徑爲allReviews.xml

你沒有告訴我們你希望你的最終結果是什麼樣的,所以我剛剛構成了一個非常基本的頁面。

+0

謝謝你。那麼我怎麼過濾出我不想要的餐廳和評論呢?例如,可以說我只想檢索restaurant_id「1」及其相應的評論? – umgrand

+0

@umgrand將''更改爲''。 –

相關問題