当前位置: 首页 > 知识库问答 >
问题:

为什么XSL转换为线性xml失败[重复]

陶睿
2023-03-14

由于未知原因,SEPA付款文件无法转换为线性xml。

我在下面使用了xml文件和样式表http://http://www.utilities-在线。信息/xsltransformation

结果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个答案

姜宏放
2023-03-14

进行以下更正:

>

  • 向样式表添加标签。

    my:准备到TxAmt/*。从这一点开始,输出将至少包含空标签。

    my:准备到XPaths中的每个其他标签名称。然后您将看到值。

    出于可读性原因,我还将indent=“yes”添加到了输出标签。在最终版本中删除它。

    下面您已经更正了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"
      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>
    

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <VFPData xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02">
       <Document-BankCD>
          <SubFmlyCd>BOOK</SubFmlyCd>
          <tasusumma>2.50</tasusumma>
          <raha>EUR</raha>
       </Document-BankCD>
    </VFPData>
    

  •  类似资料:
    • 问题内容: 输入XML 输出Json 如何编写通用的xslt样式表,它将输入的xml转换为json 输入可能在根目录下有太多结果,在结果下可能有系统和名称,在系统下还有ID名称和值。 问题答案: 我从此处复制并粘贴的以下XSLT 应该可以帮助您将XML转换为JSON。谢谢 :)

    • 本文向大家介绍Python将xml和xsl转换为html的方法,包括了Python将xml和xsl转换为html的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python将xml和xsl转换为html的方法。分享给大家供大家参考。具体分析如下: 这里需要用libxml2,所以还要先安装了libxml2模块才能使用。代码如下: 希望本文所述对大家的Python程序设计有所帮助。

    • 本文向大家介绍Python实现把xml或xsl转换为html格式,包括了Python实现把xml或xsl转换为html格式的使用技巧和注意事项,需要的朋友参考一下 前些天用python处理xml的转换的一个小程序,用来把xml,xsl转换成html。 用的libxml2,所以还要先安装了libxml2模块才能使用。

    • 作为一个简化的例子,考虑这个有两个字段的表。一个是字符串,另一个是XML。 Source=“MediaConversions” 现在我想查询该表,并将结果作为json,但也要一次性将XML转换为json。 导致 [{"Source":"媒体转换","OrderParameter":" 但我想把它转换成: [{"Source":"MediaConversion","OrderParameter":{

    • 问题内容: 我有一个名为“ FechasFirmaHorometros”的视图,定义为 我有一个名为[RespuestaPreguntaHorometrosFecha]的函数定义为 在调试使用该函数的另一个存储过程时,我一直在碰到上述函数时收到此消息 但是我可以自由地做类似的事情 为什么会发生这种情况,我该如何解决或解决呢? 问题答案: 由于某种原因,我认为这是某种类型的字符串列。您应该解决该问题

    • 问题内容: 当我打开JMeter仪表板时,我可以在列中看到成功,而在列中看到失败。根据城市词典 KO等于OK “ KO”等价于表示“ OK”的字母的含义和缩写 还是法国的非正式缩写? 我注意到,法语和意大利语非正式交流中的首字母缩写词KO意味着“不好” 我看到了有关将KO标签更改为失败的不同问题。 为什么JMeter将错误称为,在性能测试中还有其他含义吗?还是在积极思考失败也可以的地方? 问题答案