2010-08-25 154 views
1

我正在使用XSLT來生成我的HTML。如何使用xslt來計算xml元素中的xml節點

我有下面的XML,我想寫條件,如果只有一個國家節點內的城市節點我想寫一些條件,請參閱下面的XML。

有兩個xml。

1)destinations.xml

<?xml version="1.0"?> 
    <list type="Destinations"> 
    <resources location="include/xml/locations.xml"> 
    <publication>232</publication> 
    </resources> 
    <destination id="594904" title="Maldives" url="/destinations_offers/destinations/asiapacific/maldives/maldives.aspx" thumbnail="/99/english/images/square_tcm481-594879.jpg" FeaturedDestination="true">   
    <city id="192513" /> 
    </destination> 
    <destination id="594089" title="New Delhi" url="/destinations_offers/destinations/asiapacific/india/newdelhi.aspx" thumbnail="/99/english/images/sydney_tcm481-594346.jpg" FeaturedDestination="true" NewestDestination="true">   
    <city id="192460" /> 
    </destination> 
    </list> 

對於eample在上述XML有city id = 192513馬爾代夫並且在locations.xml單獨節點,這將在下面locations.xml檢查中,如果該ID是單獨在那個國家節點那麼我需要調用特定的條件。

<?xml version="1.0"?> 
<list type="Locations"> 
<region id="192393" code="ASIA" name="Asia &amp; the Pacific" shortname="Asia &amp; the Pacific"> 
<country id="192395" code="AU" name="Australia" shortname="Australia"> 
<city id="192397" code="BNE" name="Brisbane" shortname="Brisbane"> 
<airport id="192399" code="BNE" name="Brisbane International Airport" shortname="Brisbane"></airport> 
</city> 
<city id="192409" code="SYD" name="Sydney" shortname="Sydney"> 
<airport id="192411" code="SYD" name="Kingsford Smith Airport" shortname="Sydney"></airport> 
</city> 
</country> 
<country id="192511" code="MV" name="Maldives" shortname="Maldives"> 
<city id="192513" code="MLE" name="Male" shortname="Male"> 
<airport id="192515" code="MLE" name="Male International Airport" shortname="Male"></airport> 
</city> 
</country> 
</region> 
</list> 

請建議!

謝謝。

+0

好qyestion (+1)。請參閱我的答案,瞭解簡短的單行XPath解決方案。 – 2010-08-25 13:05:13

回答

0

使用

count($vLocations/*/*/country[city[@id = $vDestCity/@id]]/city) = 1 

在這個表達式中$vLocations與頂部元件的XML文檔<list type="Locations">和$ vDestCity是<city>元素,我們希望從頂級元素的XML文檔<list type="Destinations">

看到這在行動

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

<my:locations> 
    <list type="Locations"> 
     <region id="192393" code="ASIA" 
       name="Asia &amp; the Pacific" 
       shortname="Asia &amp; the Pacific"> 
      <country id="192395" code="AU" name="Australia" 
           shortname="Australia"> 
       <city id="192397" code="BNE" name="Brisbane" 
            shortname="Brisbane"> 
        <airport id="192399" code="BNE" 
              name="Brisbane International Airport" 
              shortname="Brisbane"> 
             </airport> 
       </city> 
       <city id="192409" code="SYD" name="Sydney" 
            shortname="Sydney"> 
        <airport id="192411" code="SYD" 
             name="Kingsford Smith Airport" 
             shortname="Sydney"> 
             </airport> 
       </city> 
      </country> 
      <country id="192511" code="MV" name="Maldives" 
           shortname="Maldives"> 
       <city id="192513" code="MLE" name="Male" 
            shortname="Male"> 
        <airport id="192515" code="MLE" 
              name="Male International Airport" 
              shortname="Male"> 
             </airport> 
       </city> 
      </country> 
     </region> 
    </list> 
</my:locations> 

<xsl:variable name="vLocations" 
    select="document('')/*/my:locations"/> 

<xsl:variable name="vDestCity1" 
    select="/*/destination/city[@id=192513]"/> 

<xsl:variable name="vDestCity2" 
    select="/*/destination/city[@id=192397]"/> 

<xsl:template match="/"> 
    <xsl:value-of select= 
    "count($vLocations/*/*/country 
       [city[@id = $vDestCity1/@id]]/city 
      ) = 1 
    "/> 
    : 
<xsl:text/> 
    <xsl:value-of select= 
    "count($vLocations/*/*/country 
       [city[@id = $vDestCity2/@id]]/city 
      ) = 1 
    "/> 

</xsl:template> 
</xsl:stylesheet> 

當這種轉變是在提供 destinations.xml應用:

<list type="Destinations"> 
    <resources location="include/xml/locations.xml"> 
     <publication>232</publication> 
    </resources> 
    <destination id="594904" title="Maldives" url="/destinations_offers/destinations/asiapacific/maldives/maldives.aspx" thumbnail="/99/english/images/square_tcm481-594879.jpg" FeaturedDestination="true"> 
     <city id="192513" /> 
    </destination> 
    <destination id="594089" title="New Delhi" url="/destinations_offers/destinations/asiapacific/india/newdelhi.aspx" thumbnail="/99/english/images/sydney_tcm481-594346.jpg" FeaturedDestination="true" NewestDestination="true"> 
     <city id="192460" /> 
    </destination> 
</list> 

的希望,正確的結果產生

true 
    : 
false 
0

例如澳大利亞:計數(//國家[@ ID = '192395'] /地點)