2014-09-19 67 views
0

我有一個XML文檔,我正嘗試使用XSLT將其轉換爲KML文檔(在Google地球上使用)。 這裏是我的XML文檔的一小部分:如何爲xsl的每個元素上的每個元素指定不同的名稱?

<rtc> 
    <liste-trajets> 
    </liste-trajets> 
    <trajets> 
    <metrobus> 
     <bus-trajet no="800"> 
      <coordonnee lat="46.75183033" long="-71.33077615" /> 
      <coordonnee lat="46.75166296" long="-71.33102882" /> 
      <coordonnee lat="46.75156178" long="-71.33121051" /> 
      <coordonnee lat="46.75150417" long="-71.3313392" /> 
      <coordonnee lat="46.75143369" long="-71.33150566" /> 
      <coordonnee lat="46.75138512" long="-71.33162664" /> 
      <coordonnee lat="46.7513409" long="-71.33176994" /> 
      <coordonnee lat="46.75130584" long="-71.33188982" /> 
      <coordonnee lat="46.75128698" long="-71.33200995" /> 
      <coordonnee lat="46.75127417" long="-71.33216289" /> 
      <coordonnee lat="46.75127735" long="-71.33234357" /> 
      <coordonnee lat="46.75129765" long="-71.33252189" /> 
      <coordonnee lat="46.75133359" long="-71.33265202" /> 
      <coordonnee lat="46.75139087" long="-71.33281652" /> 
      <coordonnee lat="46.75145545" long="-71.33296673" /> 
      <coordonnee lat="46.75155389" long="-71.33316196" />        
     </bus-trajet> 
     <bus-trajet no="801"> 
      <coordonnee lat="46.75183033" long="-71.33077615" /> 
      <coordonnee lat="46.75166296" long="-71.33102882" /> 
      <coordonnee lat="46.75156178" long="-71.33121051" /> 
      <coordonnee lat="46.75150417" long="-71.3313392" /> 
      <coordonnee lat="46.75143369" long="-71.33150566" /> 
      <coordonnee lat="46.75138512" long="-71.33162664" /> 
      <coordonnee lat="46.7513409" long="-71.33176994" /> 
      <coordonnee lat="46.75130584" long="-71.33188982" /> 
      <coordonnee lat="46.75128698" long="-71.33200995" /> 
      <coordonnee lat="46.75127417" long="-71.33216289" /> 
      <coordonnee lat="46.75127735" long="-71.33234357" /> 
      <coordonnee lat="46.75129765" long="-71.33252189" /> 
      <coordonnee lat="46.75133359" long="-71.33265202" /> 
      <coordonnee lat="46.75139087" long="-71.33281652" /> 
      <coordonnee lat="46.75145545" long="-71.33296673" /> 
      <coordonnee lat="46.75155389" long="-71.33316196" />        
     </bus-trajet> 

    </metrobus> 

    <lebus> 
     <bus-trajet no="15"> 
      <coordonnee lat="46.75183033" long="-71.33077615" /> 
      <coordonnee lat="46.75166296" long="-71.33102882" /> 
      <coordonnee lat="46.75156178" long="-71.33121051" /> 
      <coordonnee lat="46.75150417" long="-71.3313392" /> 
      <coordonnee lat="46.75143369" long="-71.33150566" /> 
      <coordonnee lat="46.75138512" long="-71.33162664" /> 
      <coordonnee lat="46.7513409" long="-71.33176994" /> 
      <coordonnee lat="46.75130584" long="-71.33188982" /> 
      <coordonnee lat="46.75128698" long="-71.33200995" /> 
      <coordonnee lat="46.75127417" long="-71.33216289" /> 
      <coordonnee lat="46.75127735" long="-71.33234357" /> 
      <coordonnee lat="46.75129765" long="-71.33252189" /> 
      <coordonnee lat="46.75133359" long="-71.33265202" /> 
      <coordonnee lat="46.75139087" long="-71.33281652" /> 
      <coordonnee lat="46.75145545" long="-71.33296673" /> 
      <coordonnee lat="46.75155389" long="-71.33316196" />  
     </bus-trajet> 
    </lebus> 
</trajets> 
</rtc> 

我無法實現/領悟什麼是選擇在RTC/trajets(都城,LEBUS,expressbus,couchetard)每個節點。問題是不能爲每個(rtc/trajets/elementX)做,因爲elementX每次都有不同的名稱。該文件是非常大的,所以我沒有完全複製它基本上結構如下(應該有一個XML架構...)rtc> trajets> metrobus,lebus,expressbus,couchetard>公共汽車trajets(所有公交線路對於這種類型的巴士)>該總線的座標。

以下是我迄今所做的XSL

<?xml version="1.0" encoding="utf-8" ?> 

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

     <xsl:template match="/"> 
<kml xmlns="http://www.opengis.net/kml/2.2" 
    xmlns:gx="http://www.google.com/kml/ext/2.2"> 
      <Document> 

       <Placemark>  
        <LineString> 
         <xsl:for-each select="bus-trajet"> 
         <Coordinates> 
          <xsl:for-each select="coordonnee"> 
           <xsl:value-of select="long"/> , <xsl:value-of select="lat"/> 
          </xsl:for-each>    
         </Coordinates> 
         </xsl:for-each> 
        </LineString> 
        <Style> 
         <LineStyle> 
          <color></color> 
         </LineStyle> 
         <LabelStyle> 
          <color></color> 
         </LabelStyle> 
        </Style>    
       </Placemark> 

      </Document> 
</kml>  


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

我也很困惑,如何建立可容納公交車的類別結構,因爲在標記它是直接地標(公交線路的座標)。

任何幫助表示讚賞和遺憾,如果有一半的代碼是法語...

回答

1

此刻的你有這個xsl:for-each

<xsl:for-each select="/bus-trajet"> 

但目前這不是因爲你是點實現多位於文檔節點上(由於模板匹配/),因此它正在查找名爲bus-trajet的根元素。現在

,你可以做的是這樣的......

<xsl:for-each select="/rtc/trajets/*/bus-trajet"> 

注意使用*這將匹配任何元素。如果你想只匹配元素的子集,你可以這樣做......

<xsl:for-each select="/rtc/trajets/*[self::metrobus or self::lebus]/bus-trajet"> 

或者,您也可以做到這一點,這將在任何級別

<xsl:for-each select="//bus-trajet"> 

匹配bus-traject作爲一個側面說明,你這樣做是爲了獲得座標...

<xsl:value-of select="long"/> , <xsl:value-of select="lat"/> 

但它應該是以下方面的longlat是屬性

<xsl:value-of select="@long"/> , <xsl:value-of select="@lat"/> 
+0

這非常有幫助非常感謝你,也謝謝你的附註,因爲我知道我應該把@作爲屬性,粗心的錯誤。 – 2014-09-20 00:02:17