Определить пространство имен по умолчанию для использования в XSL XPath с пространством имен xpath-default

У меня есть этот простой XML-документ:

<?xml version='1.0' encoding='UTF-8'?>
<registry xmlns="http://www.iana.org/assignments" id="character-sets">
     <registry id="character-sets-1">
       <record>
         <name>ANSI_X3.4-1968</name>
      </record>
     </registry>
</registry>

Когда я использую этот xsl, я могу извлечь имя:

<?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://www.iana.org/assignments" version="1.0">
  <xsl:template match="/my:registry">
      <xsl:copy-of select="//my:record/my:name"/>
  </xsl:template>
</xsl:stylesheet>

Однако, если я опускаю пространство имен в xsl xpath-selectors, я не получаю никакого вывода:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://www.iana.org/assignments" xpath-default-namespace="http://www.iana.org/assignments" version="1.0">
  <xsl:template match="/registry">
       <xsl:copy-of select="//record/name"/>
  </xsl:template>
</xsl:stylesheet>

Я думал, что xpath-default-namespace предназначено для выполнения трюка. Что мне не хватает?

В случае важности версий библиотеки у меня есть

libexpat1 ( >= 1.95.8)

libxerces-C3.1

libxml2 ( >= 2.7.4)

libxslt1.1 ( >= 1.1.25)

Ответ 1

К сожалению, xpath-default-namespace - это функция XSLT 2.0. Вам нужно будет повторить пространство имен или добавить его в свой xpath в xslt 1.0

Ссылка: Дженни Теннисон и IBM