使用xslt删除名称空间前缀

时间:2013-11-28 12:51:29

标签: xml xslt xpath

我正在尝试从外部xsd文件中检索类型定义。在这个例子中,我的$attType有一个名称空间前缀。但是在XPath中我用来获得我不想要前缀的定义。 问题是:如何?

<xsl:copy-of select="document('../file.xsd')//xs:simpleType[@name=$attType]" />

1 个答案:

答案 0 :(得分:0)

稍微不那么脏的解决方案是使用local-name()来正确确定命名空间内对象的名称。

这应该从元素和attirbutes中剥离命名空间,并保留文本:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*">
    <xsl:attribute name="{local-name(.)}">
      <xsl:value-of select="." />
    </xsl:attribute>
  </xsl:template>
  <xsl:template match="node()">
    <xsl:element name="{local-name(.)}">
      <xsl:apply-templates select="@*|*|text()"/>
    </xsl:element>
  </xsl:template>
  <xsl:template match="text()">
      <xsl:copy />
  </xsl:template>
</xsl:stylesheet>