我有以下KML(XML)文档:
<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Folder>
<Placemark>
<name>my name</name>
<styleUrl>#my url</styleUrl>
<ExtendedData>
<Data name="firstID">
<value>01234567</value>
</Data>
<Data name="secondID">
<value/>
</Data>
</ExtendedData>
<description>
long description here
</description>
<Point>
<coordinates>-1.1111,2.22222</coordinates>
</Point>
<address>my address</address>
</Placemark>
</Folder>
</Document>
</kml>
我已经实现了将节点“地址”移动到“ ExtendedData”,并删除了节点“数据名称=“ secondId””,现在我需要将标签“地址”重命名为“数据名称=“地址”“并将地址值封装到“值”标签中,结果如下:
<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Folder>
<Placemark>
<name>my name</name>
<styleUrl>#my url</styleUrl>
<ExtendedData>
<Data name="Address">
<value>my address</value>
</Data>
<Data name="firstID">
<value>01234567</value>
</Data>
</ExtendedData>
<description>
long description here
</description>
<Point>
<coordinates>-1.1111,2.22222</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>
到目前为止,这是我的XSLT(移动地址并删除secondID):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2">
<xsl:output method= "xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="kml:address"/>
<xsl:template match="kml:ExtendedData">
<xsl:copy>
<xsl:copy-of select="../kml:address"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="kml:Data[@name='secondID']" />
</xsl:stylesheet>
要重命名,我尝试过:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2">
<xsl:output method= "xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="kml:address">
<Data name="Address">
<value>
<xsl:apply-templates select="@* | node()"/>
</value>
</Data>
</xsl:template>
<xsl:template match="kml:ExtendedData">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:copy-of select="../kml:Data[@name='Address']"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="kml:Data[@name='secondID']" />
</xsl:stylesheet>
这将重命名地址,但是将属性'xmlns =“”添加到标签中,并且不会将新重命名的标签移动到'ExtendedData'中
有什么想法吗?我是XLST的新手。预先感谢
答案 0 :(得分:3)
怎么样:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:kml="http://www.opengis.net/kml/2.2"
xmlns="http://www.opengis.net/kml/2.2"
exclude-result-prefixes="kml">
<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="kml:ExtendedData">
<xsl:copy>
<!-- move address to here -->
<Data name="Address">
<value>
<xsl:value-of select="../kml:address"/>
</value>
</Data>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<!-- remove address at original position -->
<xsl:template match="kml:address"/>
</xsl:stylesheet>
请注意在xsl:stylesheet
起始标记处添加的名称空间声明。