由于不明原因,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>
答案 0 :(得分:1)
进行以下更正:
将ALTER TABLE posts DROP COLUMN image_file_name;
添加到
xmlns:my="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"
代码。
将stylesheet
添加到my:
。从这一点来看,输出将包括at
至少空标签。
将TxAmt/*
添加到XPath中的每个其他标记名称。然后你会看到值。
出于可读性原因,我还在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>