我有一个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>
我也很困惑如何创建一个可以容纳总线类别的结构,因为在标签之后它直接是一个地标(总线的线与其坐标)。
如果代码的一半是法语,那么任何帮助都会感激和抱歉...
答案 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"/>
但它应该是以下内容,因为long
和lat
是属性
<xsl:value-of select="@long"/> , <xsl:value-of select="@lat"/>