2016-10-18 105 views
-2

我需要轉換XML時遇到的一些問題...串連所有標籤爲一個標籤作爲字符串

當前XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dat="http://ws.wso2.org/dataservice"> 
<soapenv:Body> 
    <dat:UpsertItemGeoObject> 
     <dat:ItemId>?</dat:ItemId> 
     <dat:GeoObjects> 
      <dat:GeoObjectPoint> 
       <dat:GeoObjectType>Point</dat:GeoObjectType> 
       <dat:GeoObjectPoints> 
        <dat:Point> 
         <dat:Lat>1.123</dat:Lat> 
         <dat:Lng>1.123</dat:Lng> 
        </dat:Point> 
       </dat:GeoObjectPoints> 
      </dat:GeoObjectPoint> 
      <dat:GeoObjectPolyline> 
       <dat:GeoObjectType>Polyline</dat:GeoObjectType> 
       <dat:GeoObjectPoints> 
        <!--one or more repetitions:--> 
        <dat:Point> 
         <dat:Lat>2.123</dat:Lat> 
         <dat:Lng>2.456</dat:Lng> 
        </dat:Point> 
        <dat:Point> 
         <dat:Lat>2.123</dat:Lat> 
         <dat:Lng>2.789</dat:Lng> 
        </dat:Point> 
        <dat:Point> 
         <dat:Lat>2.123</dat:Lat> 
         <dat:Lng>2.000</dat:Lng> 
        </dat:Point> 
       </dat:GeoObjectPoints> 
      </dat:GeoObjectPolyline> 
      <dat:GeoObjectPolygon> 
       <dat:GeoObjectType>Polygon</dat:GeoObjectType> 
       <dat:GeoObjectPoints> 
        <!--one or more repetitions:--> 
        <dat:Point> 
         <dat:Lat>3.123</dat:Lat> 
         <dat:Lng>3.123</dat:Lng> 
        </dat:Point> 
        <dat:Point> 
         <dat:Lat>3.123</dat:Lat> 
         <dat:Lng>3.123</dat:Lng> 
        </dat:Point> 
        <dat:Point> 
         <dat:Lat>3.123</dat:Lat> 
         <dat:Lng>3.123</dat:Lng> 
        </dat:Point> 
        <dat:Point> 
         <dat:Lat>3.123</dat:Lat> 
         <dat:Lng>3.123</dat:Lng> 
        </dat:Point> 
        <dat:Point> 
         <dat:Lat>3.123</dat:Lat> 
         <dat:Lng>3.123</dat:Lng> 
        </dat:Point> 
       </dat:GeoObjectPoints> 
      </dat:GeoObjectPolygon> 
     </dat:GeoObjects> 
    </dat:UpsertItemGeoObject> 
</soapenv:Body> 

所需的輸出:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dat="http://ws.wso2.org/dataservice"> 
<soapenv:Body> 
    <dat:UpsertItemGeoObject> 
     <dat:ItemId>12345</dat:ItemId> 
     <dat:GeoObjects> 
      <dat:GeoObjectPoint> 
       <dat:GeoObjectType>Point</dat:GeoObjectType> 
       <dat:Coordinates>1.123 1.123</dat:Coordinates> 
      </dat:GeoObjectPoint> 
      <dat:GeoObjectPolyline> 
       <dat:GeoObjectType>Polyline</dat:GeoObjectType> 
       <dat:Coordinates>2.123 2.456,2.123 2.789,2.123 2.000</dat:Coordinates><!-- Lat Long, Lat Long, Lat Long --> 
      </dat:GeoObjectPolyline> 
      <dat:GeoObjectPolygon> 
       <dat:GeoObjectType>Polygon</dat:GeoObjectType> 
       <dat:Coordinates>3.123 3.123,3.123 3.123,3.123 3.123</dat:Coordinates><!-- Lat Long, Lat Long, Lat Long --> 
      </dat:GeoObjectPolygon> 
     </dat:GeoObjects> 
    </dat:UpsertItemGeoObject> 
</soapenv:Body> 

我想從

     <dat:Point> 
          <dat:Lat>1.123</dat:Lat> 
          <dat:Lng>1.123</dat:Lng> 
         </dat:Point> 

串連所有座標轉換成一個標籤 - <Coordinates>Lat(Space)Lng(Coma)Lat(Space)Lng<Coordinates>,但我不能找到什麼來幫助我完成這個任務。 如果有人可以幫助某種例子或類似的東西,我會非常感激。

回答

0

試試這樣說:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:dat="http://ws.wso2.org/dataservice"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="dat:GeoObjectPoints"> 
    <dat:Coordinates> 
     <xsl:for-each select="dat:Point"> 
      <xsl:value-of select="dat:Lat"/> 
      <xsl:text> </xsl:text> 
      <xsl:value-of select="dat:Lng"/> 
      <xsl:if test="position()!=last()"> 
       <xsl:text>,</xsl:text> 
      </xsl:if> 
     </xsl:for-each> 
    </dat:Coordinates> 
</xsl:template> 

</xsl:stylesheet> 
相關問題