问题 使用xpath-default-namespace在XSL XPath中定义默认名称空间


我有这个简单的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)


10628
2018-01-11 08:19


起源



答案:


不幸 xpath-default-namespace 是一个XSLT 2.0功能。您需要重复命名空间或将其别名 xpath 在 xslt 1.0

参考: 珍妮坦尼森 和 IBM


14
2018-01-11 08:30



是的,现在我看到libxslt1.1不支持 xpath-default-namespace 谢谢! - JohnDoe
怎么可以定义 xpath-default-namespace 在 xslt 版本1.0? - pkaramol


答案:


不幸 xpath-default-namespace 是一个XSLT 2.0功能。您需要重复命名空间或将其别名 xpath 在 xslt 1.0

参考: 珍妮坦尼森 和 IBM


14
2018-01-11 08:30



是的,现在我看到libxslt1.1不支持 xpath-default-namespace 谢谢! - JohnDoe
怎么可以定义 xpath-default-namespace 在 xslt 版本1.0? - pkaramol