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