我需要转换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 :(得分: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>