使用NIFI

时间:2019-05-23 05:19:46

标签: apache apache-nifi

嗨,我正在建立将Xml转换为csv的管道, 在Nifi中,我首先将XML数据转换为Json,然后从Json转换为CSV,但是我的输出文件不在csv中,任何人都可以帮助我

myxmldata

 <?xml version="1.0" encoding="UTF-8"?> 
 <bookstore>
 <book category="COOKING">
 <title lang="en">Everyday Italian</title>
 <author>Giada De Laurentiis</author>
 <year>2005</year>
 <price>30.00</price>
 </book>
 <book category="CHILDREN">
 <title lang="en">Harry Potter</title>
 <author>J K. Rowling</author>
 <year>2005</year>
  <price>29.99</price>
  </book>
   <book category="WEB">
  <title lang="en">XQuery Kick Start</title>
   <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
 <author>Vaidyanathan Nagarajan</author>
 <year>2003</year>
 <price>49.99</price>
  </book>
 <book category="WEB">
  <title lang="en">Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
    <price>39.95</price>
   </book>
   </bookstore>

我的管道图片:- enter image description here

将XML转换为json后,我的json数据如下

[{"book":[{"title":"Everyday Italian","author":"Giada De 
 Laurentiis","year":2005,"price":30.0},{"title":"Harry 
 Potter","author":"J K. Rowling","year":2005,"price":29.99}, 
 {"title":"XQuery Kick Start","author":"Vaidyanathan 
  Nagarajan","year":2003,"price":49.99},{"title":"Learning 
  XML","author":"Erik T. Ray","year":2003,"price":39.95}]}]

直到这里一切正常,但将其转换为csv时我得到了错误的csv数据 我将json转换为csv处理器映像 enter image description here

我的csv输出数据如下

book
"[MapRecord[{title=Everyday Italian, year=2005, author=Giada De 
Laurentiis, price=30.0}], MapRecord[{title=Harry Potter, year=2005, 
 author=J K. Rowling, price=29.99}], MapRecord[{title=XQuery Kick 
 Start, year=2003, author=Vaidyanathan Nagarajan, price=49.99}], 
 MapRecord[{title=Learning XML, year=2003, author=Erik T. Ray, 
  price=39.95}]]"

2 个答案:

答案 0 :(得分:1)

这里发生了几件事。

首先,如果您要更改要操作的内容(即过滤字段,转换数组等),则仅需要JoltTransformJSON处理器。如果没有,您可以删除该处理器​​并使用ConvertRecord直接从XML转换为CSV。您不需要中间的JSON表示形式。

第二,您的CSV与预期不符的原因是因为中间JSON具有数组作为键值。应该有XPath表达式,使您可以从数组中读取并转换为CSV行。如果您无法构建,则建议使用ScriptedRecordReader和/或ScriptedRecordSetWriter从序列化格式转换为复杂的内部格式,然后再转换为序列化格式。

我建议尝试直接从XML转换为CSV,然后对数据进行更改,除非在转换中丢失了必要的数据。如果是这样,可能需要其他翻译步骤。

答案 1 :(得分:0)

您的预期结果是什么? 您的书中有很多作者,因此XML转换并不容易。 将失败重定向到日志消息也可能很好,这样您就可以更好地看到它。