Talend:具有多个标头的XML =>使用Talend的工作

时间:2017-04-10 14:36:35

标签: xml talend

我收到的文件有问题,该文件有多个header =>

[XML Pic] [1]

我想用talend创建一个作业,将它拆分成许多文件或创建一个文件可读。

我尝试了很多方法但没有成功。

我收到的文件是输出文件(* .out),而不是开头的XML。

Thx的帮助! :)

编辑:

响应的答案:

例如:初始文件(* .out文件)=>

<?xml version="1.0" encoding="UTF-8"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"><BkToCstmrDbtCdtNtfctn><GrpHdr><MsgId>AI3069868076</MsgId><CreDtTm>2017-04-03T23:51:23.586</CreDtTm><MsgPgntn><PgNb>1</PgNb><LastPgInd>true</LastPgInd></MsgPgntn></GrpHdr></BkToCstmrDbtCdtNtfctn></Document>
<?xml version="1.0" encoding="UTF-8"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"><BkToCstmrDbtCdtNtfctn><GrpHdr><MsgId>AI4069973130</MsgId><CreDtTm>2017-04-04T21:09:41.090</CreDtTm><MsgPgntn><PgNb>1</PgNb><LastPgInd>true</LastPgInd></MsgPgntn></GrpHdr></BkToCstmrDbtCdtNtfctn></Document>
<?xml version="1.0" encoding="UTF-8"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"><BkToCstmrDbtCdtNtfctn><GrpHdr><MsgId>AI4069973134</MsgId><CreDtTm>2017-04-04T21:09:41.090</CreDtTm><MsgPgntn><PgNb>1</PgNb><LastPgInd>true</LastPgInd></MsgPgntn></GrpHdr></BkToCstmrDbtCdtNtfctn></Document>

我愿意

文件1:

<?xml version="1.0" encoding="UTF-8"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"><BkToCstmrDbtCdtNtfctn><GrpHdr><MsgId>AI3069868076</MsgId><CreDtTm>2017-04-03T23:51:23.586</CreDtTm><MsgPgntn><PgNb>1</PgNb><LastPgInd>true</LastPgInd></MsgPgntn></GrpHdr></BkToCstmrDbtCdtNtfctn></Document>

文件2:

<?xml version="1.0" encoding="UTF-8"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"><BkToCstmrDbtCdtNtfctn><GrpHdr><MsgId>AI4069973130</MsgId><CreDtTm>2017-04-04T21:09:41.090</CreDtTm><MsgPgntn><PgNb>1</PgNb><LastPgInd>true</LastPgInd></MsgPgntn></GrpHdr></BkToCstmrDbtCdtNtfctn></Document>

文件3:

<?xml version="1.0" encoding="UTF-8"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02"><BkToCstmrDbtCdtNtfctn><GrpHdr><MsgId>AI4069973134</MsgId><CreDtTm>2017-04-04T21:09:41.090</CreDtTm><MsgPgntn><PgNb>1</PgNb><LastPgInd>true</LastPgInd></MsgPgntn></GrpHdr></BkToCstmrDbtCdtNtfctn></Document>

&#39;因为初始文件不可读! :&#39;(

2 个答案:

答案 0 :(得分:0)

如果主题只是为输入文件的每条记录生成一个单独的文件,您可以这样继续: enter image description here

  • tSetGlobalVar初始化一个名为“fileCounter”的变量,其值为1(将用于输出文件命名)
  • tFileList迭代要转换的文件(即使只有1)
  • tFileInputFullRow一次读取输入文件1个普通行
  • tFlowToIterate迭代当前文件的每个输入行
  • tFixedFlowInput将输入流的每个字段转换为全局变量(由于tFileInputFullRow,此处称为“line”)并重新启动流(此示例中不会使用生成的全局变量)
  • tJavaRow递增“fileCounter”值并将当前行传输到输出文件

    output_row.line = input_row.content;
    globalMap.put("fileCounter", ((Integer)globalMap.get("fileCounter"))+1);

  • tFileOutputRaw为当前行生成输出文件 - 只需根据当前行级别设置文件名:

    ((String)globalMap.get("tFileList_1_CURRENT_FILEPATH")).replace(".xml", "") + (Integer)globalMap.get("fileCounter") + ".xml"

在此示例中,源文件名应以“.xml”结尾,但您可以轻松地自行安排。

这是结果(1个输入文件,3个记录= 3个输出文件):

enter image description here

答案 1 :(得分:0)

检查:

  • tFileInputFullRow架构只包含一个名为“line”的字段(默认为此)
  • tFixedFlowInput模式只包含一个名为“content”的字段,其中填充了“((String)globalMap.get(”row1.line“))”

同时检查tJavaRow架构是否类似:

您可以根据需要更改字段名称,但它们必须与作业保持一致。