仅从子节点 xsl 中删除不需要的命名空间,以转换适用于 SEPA 的文件制作者 XML



我正在编写一个xsl样式表,将Filemaker xml转换为Pain.008 xml for SEPA。我快完成了,但是我有一个问题似乎找不到答案。最顶层的节点是,它需要看起来像这样:

我有 2 个从顶级模板调用的模板。文档标记在这 2 次模板调用之前打开,在这两个模板调用之后关闭。如果我将命名空间添加到文档标签,则两个模板的顶级标签都包含一个不需要的空命名空间 xmlns"。我意识到我可能没有正确匹配模板,但是我已经尝试了一些不同的方式来删除这些不需要的命名空间,但似乎没有任何效果。请参阅下面的样式表和输出。

样式表(其中的一部分):

<xsl:template match="/">        
      <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
          <CstmrDrctDbtInitn>               
              <xsl:call-template name="header"></xsl:call-template>               
              <xsl:call-template name="paymentinf"></xsl:call-template>
          </CstmrDrctDbtInitn>
      </Document>
  </xsl:template>
<!-- Header template -->
<xsl:template name="header"  >
    <GrpHdr>
        <MsgId>
            <xsl:value-of select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW[1]/fm:COL[$MsgId]/fm:DATA"/>
        </MsgId>           
        <CreDtTm>
            <xsl:value-of select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW[1]/fm:COL[$CreDtTm]/fm:DATA"/>
        </CreDtTm>         
        <NbOfTxs>
            <xsl:value-of select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW[1]/fm:COL[$NbOfTxs]/fm:DATA"/>
        </NbOfTxs>          
        <CtrlSum>
            <xsl:value-of select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW[1]/fm:COL[$CtrlSum]/fm:DATA"/>
        </CtrlSum>
        <InitgPty>
            <Id>
                <OrgId>
                    <Othr>
                        <Id>
                            <xsl:value-of select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW[1]/fm:COL[$Id]/fm:DATA"/>
                        </Id>
                    </Othr>
                </OrgId>
            </Id>
        </InitgPty>
    </GrpHdr>
 </xsl:template>

输出:(仅重要部分)

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
 "xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
<CstmrDrctDbtInitn>
<GrpHdr xmlns="">
<MsgId>17</MsgId>
<CreDtTm>2013-11-04T15:43:14</CreDtTm>
<NbOfTxs>6</NbOfTxs>
<CtrlSum>6203.6</CtrlSum>
<InitgPty>
<Id>
<OrgId>
<Othr>
<Id>IE14SDD360038</Id>
</Othr>
</OrgId>
</Id>
</InitgPty>
</GrpHdr>
<PmtInf xmlns="">

期望输出:

 <?xml version="1.0" encoding="UTF-8"?>
    <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
     "xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
    <CstmrDrctDbtInitn>
    <GrpHdr>
    <MsgId>17</MsgId>
    <CreDtTm>2013-11-04T15:43:14</CreDtTm>
    <NbOfTxs>6</NbOfTxs>
    <CtrlSum>6203.6</CtrlSum>
    <InitgPty>
    <Id>
    <OrgId>
    <Othr>
    <Id>IE14SDD360038</Id>
    </Othr>
    </OrgId>
    </Id>
    </InitgPty>
    </GrpHdr>
    <PmtInf>

模板中添加所需的命名空间以<GrpHdr>,就像<Document>一样

例如

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
<GrpHdr xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">

它将是有效的 XML,重复的命名空间声明不会影响逻辑结构,并且被任何有效的解析器忽略。

最新更新