引用未声明的命名空间前缀:' json'。用xslt重命名xml attibute

时间:2016-11-24 18:24:24

标签: json xml xslt

  

更新了最小,完整和可验证的信息,感谢@Kenneth引起我的注意。

所以,我尝试使用xslt重命名xml属性,但我不断收到此错误消息:

  

对未声明的命名空间前缀的引用:' json'。

  1. 这是我的源xml:

    <?xml version="1.0" encoding="utf-8"?>
    <data>
      <code>SO000009</code>
      <businessPartner>70833A356B9A428CBDDCD2A76A49681F</businessPartner>
      <startDateTime>2018-01-25T15:24:27Z</startDateTime>
      <subject>Test</subject>
      <equipments jsonArray="true">80202</equipments>
    </data>
    
  2. 这就是我想要xml的方式:

    <?xml version="1.0" encoding="utf-16"?>
    <data xmlns:json="http://james.newtonking.com/projects/json">
      <code>SO000009</code>
      <businessPartner>70833A356B9A428CBDDCD2A76A49681F</businessPartner>
      <startDateTime>2018-01-25T15:24:27Z</startDateTime>
      <subject>Test</subject>
      <equipments json:Array="true">80202</equipments>
    </data>
    
  3. 这是我的xslt:

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output indent="yes"/>
      <xsl:template match="/data">
        <data xmlns:json="http://james.newtonking.com/projects/json">
          <xsl:apply-templates select="node()|@*" />
        </data>
      </xsl:template>
    
      <xsl:template match="@*">
        <xsl:attribute name="{local-name()}">
          <xsl:value-of select="." />
        </xsl:attribute>
      </xsl:template>
    
      <xsl:template match="node()">
        <xsl:copy>
          <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="@jsonArray">
        <xsl:attribute name="json:Array">
          <xsl:value-of select="."/>
        </xsl:attribute>
      </xsl:template>
    </xsl:stylesheet>
    
  4. 当我试图转换我的xml时,我不断收到此消息:

      

    编译样式表时发生错误&#39; CS_jsonArray.xslt&#39;。

         

    代码:0x80004005

         

    对未声明的命名空间前缀的引用:&#39; json&#39;。

1 个答案:

答案 0 :(得分:0)

查看&#39;相关&#39;侧边栏,我确实找到了自己问题的答案。

  

XSL transformation - Namespace prefix undeclared

对于那些有同样问题的人,请确保要更改其属性名称的名称空间也在xslt标记本身...

这就是我的xslt开始的方式:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>...

这就是我改变它的方式:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:json="http://james.newtonking.com/projects/json">
  <xsl:output indent="yes"/>...