为什么XSL转换为线性xml失败

时间:2017-01-15 17:40:58

标签: xml templates xslt

由于不明原因,SEPA支付文件无法转换为线性xml。

我使用http://http://www.utilities-online.info/xsltransformation

尝试了下面的xml文件和样式表

结果xml ei为空。 选择

<xsl:template match="TxAmt/*">

必须在文件中找到mach,所以它应该返回一条记录。 命名空间在XSL文件中定义。

如何解决?

XML:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <BkToCstmrDbtCdtNtfctn>
    <GrpHdr>
      <MsgId>8FE0A83C6506239E141E7CD197C0E588</MsgId>
      <CreDtTm>2017-01-10T16:42:05.399+02:00</CreDtTm>
    </GrpHdr>
    <Ntfctn>
      <Id>8FE0A83C6506239E141E7CD197C0E588</Id>
      <CreDtTm>2017-01-10T16:42:05.399+02:00</CreDtTm>
      <Acct>
        <Id>
          <IBAN>XX891010000007099224</IBAN>
        </Id>
        <Ccy>EUR</Ccy>
        <Ownr>
          <Nm>Test Ltd</Nm>
          <PstlAdr>
            <AdrLine>test</AdrLine>
          </PstlAdr>
          <Id>
            <OrgId>
              <Othr>
                <Id>102167</Id>
                <SchmeNm>
                  <Cd>COID</Cd>
                </SchmeNm>
              </Othr>
            </OrgId>
          </Id>
        </Ownr>
        <Svcr>
          <FinInstnId>
            <BIC>EEUHEE2X</BIC>
            <Nm>Bank</Nm>
            <PstlAdr>
              <AdrLine>Test</AdrLine>
            </PstlAdr>
          </FinInstnId>
        </Svcr>
      </Acct>
      <Ntry>
        <Amt Ccy="EUR">2.50</Amt>
        <CdtDbtInd>CRDT</CdtDbtInd>
        <Sts>BOOK</Sts>
        <BookgDt>
          <Dt>2017-01-10</Dt>
        </BookgDt>
        <ValDt>
          <Dt>2017-01-10</Dt>
        </ValDt>
        <AcctSvcrRef>RO1433781673L02</AcctSvcrRef>
        <BkTxCd>
          <Domn>
            <Cd>PMNT</Cd>
            <Fmly>
              <Cd>RCDT</Cd>
              <SubFmlyCd>BOOK</SubFmlyCd>
            </Fmly>
          </Domn>
        </BkTxCd>
        <NtryDtls>
          <TxDtls>
            <Refs>
              <AcctSvcrRef>RO1433781673L02</AcctSvcrRef>
            </Refs>
            <AmtDtls>
              <TxAmt>
                <Amt Ccy="EUR">2.50</Amt>
              </TxAmt>
            </AmtDtls>
            <RltdPties>
              <Dbtr>
                <Nm>EXPRESSLIIN</Nm>
                <Id>
                  <OrgId>
                    <Othr>
                      <Id>6310130</Id>
                      <SchmeNm>
                        <Cd>COID</Cd>
                      </SchmeNm>
                    </Othr>
                  </OrgId>
                </Id>
              </Dbtr>
              <DbtrAcct>
                <Id>
                  <IBAN>XX021010220208830224</IBAN>
                </Id>
              </DbtrAcct>
            </RltdPties>
            <RltdAgts>
              <DbtrAgt>
                <FinInstnId>
                  <BIC>DEUHEE2X</BIC>
                  <Nm>DEAS</Nm>
                </FinInstnId>
              </DbtrAgt>
            </RltdAgts>
            <RmtInf>
              <Ustrd>Test3</Ustrd>
            </RmtInf>
          </TxDtls>
        </NtryDtls>
      </Ntry>
    </Ntfctn>
  </BkToCstmrDbtCdtNtfctn>
</Document>

XSLT:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
  <xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="yes"/>

  <xsl:template match="/">
    <xsl:element name="VFPData">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="TxAmt/*">

    <xsl:element name="Document-BankCD">
      <xsl:element name="SubFmlyCd">
        <xsl:value-of select="../../../../../BkTxCd/Domn/Fmly/SubFmlyCd"/>
      </xsl:element>


      <xsl:element name="tasusumma">
        <xsl:value-of select="../Amt"/>
      </xsl:element>

      <xsl:element name="raha">
        <xsl:value-of select="../Amt/@Ccy"/>
      </xsl:element>

    </xsl:element>
  </xsl:template>

  <xsl:template match="text()">
  </xsl:template>

  <xsl:template match="*">
    <xsl:apply-templates/>
  </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

进行以下更正:

  1. ALTER TABLE posts DROP COLUMN image_file_name; 添加到 xmlns:my="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"代码。

  2. stylesheet添加到my:。从这一点来看,输出将包括at 至少空标签。

  3. TxAmt/*添加到XPath中的每个其他标记名称。然后你会看到值。

  4. 出于可读性原因,我还在my:标记中添加了indent="yes"。 在最终版本中删除它。

    下面你已经更正了XSLT。 请注意模板匹配output节点的次要简化。

    text()

    http://xsltransform.net 与您的XML一起使用,我得到以下结果:

    <?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
    <xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:my="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"
    >
      <xsl:output method="xml" indent="yes" version="1.0" encoding="UTF-8" standalone="yes"/>
    
      <xsl:template match="/">
        <xsl:element name="VFPData">
          <xsl:apply-templates/>
        </xsl:element>
      </xsl:template>
    
      <xsl:template match="my:TxAmt/*">
    
        <xsl:element name="Document-BankCD">
          <xsl:element name="SubFmlyCd">
            <xsl:value-of select="../../../../../my:BkTxCd/my:Domn/my:Fmly/my:SubFmlyCd"/>
          </xsl:element>
    
          <xsl:element name="tasusumma">
            <xsl:value-of select="../my:Amt"/>
          </xsl:element>
    
          <xsl:element name="raha">
            <xsl:value-of select="../my:Amt/@Ccy"/>
          </xsl:element>
    
        </xsl:element>
      </xsl:template>
    
      <xsl:template match="text()"/>
    
      <xsl:template match="*">
        <xsl:apply-templates/>
      </xsl:template>
    </xsl:stylesheet>