У меня есть следующий документ 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>
Я добился того, чтобы переместить узел 'address' в 'ExtendedData', и удалил узел 'data name = "secondId"', теперь мне нужно переименовать тег 'address' в 'Data name = "Address"' и заключить значение адреса в теги 'value', что приведет к чему-то вроде этого:
<?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. Заранее спасибо