如何为每个xsl上没有相同名称的元素?

时间:2014-09-19 21:57:36

标签: xml google-maps xslt kml google-earth

我有一个XML文档,我正在尝试使用XSLT将其转换为KML文档(在Google Earth上使用)。 这是我的XML文档的一小部分:

 <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中的每个节点(metrobus,lebus,expressbus,couchetard)。问题是不能为每个(rtc / trajets / elementX)做,因为elementX每次都有不同的名称。该文件非常大,所以我没有完全复制它基本上结构如下(应该制作一个XML模式...)rtc&gt; trajets&gt; metrobus,lebus,expressbus,couchetard&gt; bus-trajets(所有的总线对于这种公共汽车的类别)&gt;这条公交线路的坐标。

这是我到目前为止在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 个答案:

答案 0 :(得分:1)

目前你有xsl:for-each

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

但目前这并没有取得多大成果,因为当你位于文档节点上时(由于/的模板匹配),所以它正在寻找一个名为bus-trajet的根元素。 / p>

现在,你能做的就是这个......

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

请注意使用与任何元素匹配的*。如果你只想匹配一部分元素,你可以这样做......

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

或者,你可以这样做,这将匹配任何级别的bus-traject

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

作为旁注,你这样做是为了得到协调......

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

但它应该是以下内容,因为longlat是属性

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