1

Filemaker xml を SEPA 用の Pain.008 xml に変換する xsl スタイルシートを作成しています。ほぼ完了しましたが、答えが見つからないように見える問題が 1 つあります。最上位ノードは次のようになります。

最上位のテンプレートから呼び出される 2 つのテンプレートがあります。Document タグは、これら 2 つのテンプレート呼び出しの前に開かれ、閉じられます。名前空間を Document タグに追加すると、両方のテンプレートの最上位タグに不要な空の名前空間 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>
4

1 に答える 1

1

で行ったように、必要な名前空間をテンプレートに追加<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 であり、繰り返される名前空間宣言は論理構造に影響を与えず、有効なパーサーによって無視されます。

于 2013-11-05T15:03:07.150 に答える