Это наиболее часто задаваемые вопросы в тегах xpath и xslt : выражения XPath для документа XML с пространством имен по умолчанию.
Просто найдите «пространство имен по умолчанию xpath», и вы найдете много хороших ответов.
Решение :
Добавьте объявление пространства имен в таблицу стилей XSLT для пространства имен по умолчанию документа XML.Используйте префикс (скажем) «x:» в этом объявлении.
В любом выражении XPath, которое ссылается на элемент по имени, добавьте к каждому имени префикс «x:» префикс.
Ваш код становится :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.w3.org/2005/Atom" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:copy>
<xsl:element name="entry">
<xsl:attribute name="published" >
<xsl:value-of select="x:entry/x:published"/>
</xsl:attribute>
<xsl:attribute name="title" >
<xsl:value-of select="x:title"/>
</xsl:attribute>
<xsl:attribute name="summary" >
<xsl:value-of select="x:summary"/>
</xsl:attribute>
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
, и теперь он производит некоторый вывод.
Объяснение :
Xpath всегда обрабатывает имена без префиксов как принадлежащие "no namespace".Таким образом, если выражение содержит имя someName
, XPath пытается найти элемент с именем someName
, который принадлежит «без пространства имен» и терпит неудачу, поскольку все элементы в документе принадлежат его непустому пространству имен по умолчанию.
Решение (как указано выше) - это для ссылки на имена с использованием префиксного имени , где префикс привязан точно кпространство имен по умолчанию для документа XML.