【问题标题】:xml attribute to elementxml 属性到元素
【发布时间】:2012-09-15 15:38:26
【问题描述】:

我有以下输入 xml:

    <?xml version='1.0' encoding='UTF-8'?>
    <fde-request xmlns="http://xml-schemas.xxx.com/bb/xxx.xsd"
        xmlns:cbe="http://xml-schemas.xxx.com/bb/xxx.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xml-schemas.xxx.com/bb/xxx.xsd xxx.xsd">

        <cbe:request-header
        user-id="mde"
        session-token="433"
        audit-id="9999"
        pearl-code="ca"
        interface-id="mf"
        system-name="sr"
        function-code="image"
        />

    <fde-parms
      function-code='b'
      sccf-serial='042463452400'
      type-process='H'>
    </fde-parms>
    </fde-request>

我需要通过将属性复制到新元素值来获得以下输出xml:

    <?xml version='1.0' encoding='UTF-8'?>
    <fde-request xmlns="http://xml-schemas.xxx.com/bb/xxx.xsd"
        xmlns:cbe="http://xml-schemas.xxx.com/bb/xxx.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xml-schemas.xxx.com/bb/xxx.xsd xxx.xsd">

         <REQUEST-HEADER>
      <REQUEST-ID>mde</REQUEST-ID>
      <REQUEST-PEACODE>ca</REQUEST-PEACODE>
       </REQUEST-HEADER> 

    <fde-parms
      function-code='b'
      sccf-serial='042463452400'
      type-process='H'>
    </fde-parms>
    </fde-request>

但是:我正在使用以下 xslt 获取此输出 xml:

    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates />
      </xsl:copy>
    </xsl:template>
        <xsl:template match="*[local-name(.)='request-header']">
        <xsl:variable name="sysname" select="@system-name"/>
        <xsl:variable name="peacode" select="@pearl-code"/>

    <REQUEST-HEADER>
    <REQUEST-ID><xsl:value-of select="$sysname"/></REQUEST-ID>
    <REQUEST-PEACODE><xsl:value-of select="$peacode"/></REQUEST-PEACODE>
    </REQUEST-HEADER>   
        </xsl:template> 
    </xsl:stylesheet>

这会产生错误的输出:xmlns="" 正在填充,这不是我想要的。

    <?xml version='1.0' encoding='UTF-8'?>
    <fde-request xmlns="http://xml-schemas.xxx.com/bb/xxx.xsd"
        xmlns:cbe="http://xml-schemas.xxx.com/bb/xxx.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xml-schemas.xxx.com/bb/xxx.xsd xxx.xsd">

         <REQUEST-HEADER **xmlns=""**>
      <REQUEST-ID>mde</REQUEST-ID>
      <REQUEST-PEACODE>ca</REQUEST-PEACODE>
       </REQUEST-HEADER> 

    <fde-parms
      function-code='b'
      sccf-serial='042463452400'
      type-process='H'>
    </fde-parms>
    </fde-request>

我需要删除这个不必要的空命名空间。
您将如何修改 xslt 以产生正确的输出?

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    在 XSLT 1.0(我假设您正在使用;您的示例样式表缺少开始标记)中,xsl:copy 总是 copies 所有命名空间节点。

    如果您想避免复制命名空间,您需要使用xsl:element 重新创建元素。它的namespace 属性是可选的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多