Узел XSLT не выбирается из-за пустой декларации пространства имен

Я получаю KML файлы, у которых есть пустое объявление пространства имен для тега описания. Они заключаются в следующем:

<kml xmlns="http://www.opengis.net/kml/2.2">
<document>
<placemark>
 <point>
 <coordinates>10.42195,46.9603,0</coordinates>
 </point>
 <name>Hallo world</name>
 <description xmlns="">My description
 </description> 
</placemark>
...
</document>
</kml>

Я написал преобразование XSLT, которое выглядит следующим образом:

<xsl:template match="kml:Placemark">
 ...
 </xsl:template>


 <xsl:template match="description">
 <xsl:element name="payload">
 <xsl:value-of select=".">
 </xsl:value-of></xsl:element>
</xsl:template>

Узел description не выбран. Он будет выбран, если я удалю (пустое) объявление пространства имен. Я видел аналогичные проблемы, о которых уже сообщалось в SO, и я пробовал предлагаемые решения, но, к сожалению, никто из них не работает для моей проблемы.

Как я могу выбрать узел description который содержит пустое объявление пространства имен xmlns=""?

Благодарю!

EDIT: я включаю полную таблицу стилей

<!--?xml version="1.0" encoding="UTF-8"?-->
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes" xmlns:xalan="http://xml.apache.org/xslt" xmlns:err="http://www.w3.org/2005/xqt-errors" xmlns:exsl="http://exslt.org/common" xmlns:str="http://exslt.org/strings" xmlns:kml="http://www.opengis.net/kml/2.2" extension-element-prefixes="str">

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" xalan:indent-amount="4">

<xsl:strip-space elements="*">

<xsl:param name="myExpirationDate">
<xsl:param name="myTime">

<xsl:template match="/">
 <xsl:element name="drive_ahead_message">

 <xsl:element name="header">
 <xsl:element name="version">1.0</xsl:element>
 </xsl:element>

 <xsl:element name="messages">
 <xsl:apply-templates select="kml:kml/kml:Document/kml:Placemark">
 </xsl:apply-templates></xsl:element>
 </xsl:element>
</xsl:template>

<xsl:template match="kml:Placemark">
 <xsl:element name="message">
 <xsl:element name="message_id">
 <xsl:value-of select="count(preceding-sibling::kml:Placemark) + 1">
 </xsl:value-of></xsl:element>

 <xsl:element name="timestamp">
 <xsl:value-of select="$myTime">
 </xsl:value-of></xsl:element>

 <xsl:element name="expiration_date">
 <xsl:value-of select="$myExpirationDate ">
 </xsl:value-of></xsl:element>

 <xsl:apply-templates select="kml:Name">
 <xsl:apply-templates select="kml:Point">
 <xsl:apply-templates select="kml:description">

 </xsl:apply-templates></xsl:apply-templates></xsl:apply-templates></xsl:element>
</xsl:template>

<xsl:template match="kml:description">
 <xsl:element name="payload">
 <xsl:value-of select=".">
 </xsl:value-of></xsl:element>
</xsl:template>

<xsl:template match="kml:Name">
 <xsl:element name="cause">
 <xsl:element name="lang">en</xsl:element>
 <xsl:element name="causename">
 <xsl:value-of select=".">
 </xsl:value-of></xsl:element>
 </xsl:element>
</xsl:template>

<xsl:template match="kml:Point">
 <xsl:variable name="coords">
 <xsl:value-of select="./kml:coordinates">
 </xsl:value-of></xsl:variable>

 <xsl:variable name="longitude">
 <xsl:value-of select="substring-before($coords,',')">
 </xsl:value-of></xsl:variable>

 <xsl:variable name="rest">
 <xsl:value-of select="substring-after($coords,',')">
 </xsl:value-of></xsl:variable>

 <xsl:variable name="latitude">
 <xsl:value-of select="substring-before($rest,',')">
 </xsl:value-of></xsl:variable>

 <xsl:variable name="height">
 <xsl:value-of select="substring-after($rest,',')">
 </xsl:value-of></xsl:variable>

 <xsl:element name="position">

 <xsl:element name="latitude">
 <xsl:value-of select="$latitude">
 </xsl:value-of></xsl:element>

 <xsl:element name="longitude">
 <xsl:value-of select="$longitude">
 </xsl:value-of></xsl:element>

 <xsl:element name="height">
 <xsl:value-of select="$height">
 </xsl:value-of></xsl:element>

 </xsl:element>

</xsl:template>

</xsl:param></xsl:param></xsl:strip-space></xsl:output></xsl:stylesheet>
1 ответ

Как было предложено, удаление пространств имен, связанных с Xalan и EXSLT, проблема была решена.

licensed under cc by-sa 3.0 with attribution.