仅从子节点xsl中删除不需要的命名空间,以转换Filemaker XML for SEPA

时间:2013-11-05 14:50:18

标签: xml xslt

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

我有两个从顶级模板调用的模板。 Document标签在这两个模板调用之前打开并关闭。如果我将名称空间添加到Document标记,则两个模板的顶级标记都包含不需要的空名称空间xmlns“”。我意识到我可能没有正确匹配模板,但我已经尝试了一些不同的东西来删除这些不需要的名称空间现在似乎没有任何工作。请参阅下面的样式表和输出。

STYLESHEET(部分内容):

<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>

1 个答案:

答案 0 :(得分:1)

将模板中所需的名称空间添加到<GrpHdr> <Document>

e.g。

<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并且重复的名称空间声明不会影响逻辑结构,并且被任何有效的解析器忽略。