没有命名空间的命名空

时间:2014-03-17 08:07:53

标签: xml xslt xpath namespaces xslt-2.0

我的命名空间有xslt2.0转换问题,请帮忙解决这个问题

很少有XML具有名称空间属性,很少有XML没有名称空间属性。

文件1:

<root id="BC" xmlns="http://www.example.com/ptktims"><child  xmlns="http://www.example.com/times"></child></root>

文件2:

<root id="BC"><child></child></root>

第一个文件工作正常,当我调用名称空间<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://www.example.com/">,但第二个文件不起作用。

当我没有调用名称空间<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">时,第二个文件正常工作,但第一个文件无效。

请指教,如何转换XML表单XSLT?

1 个答案:

答案 0 :(得分:0)

您有两个选项,使用通配符作为命名空间前缀:

<xsl:template match="*:root">
  <xsl:value-of select="*:child"/>
</xsl:template>

或为不同的名称空间编写匹配项,例如

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ptktims="http://www.example.com/ptktims"
  xmlns:times="http://www.example.com/times" version="2.0">

    <xsl:template match="root">
      <xsl:value-of select="child"/>
    </xsl:template>

    <xsl:template match="ptktims:root">
      <xsl:value-of select="times:child"/>
    </xsl:template>

第三个选项是链转换或转换步骤,其中第一步规范化命名空间(全部删除或放置所需的命名空间),然后第二步只需要使用规范化输入格式的模板。