嗨,我正在建立将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>
将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处理器映像
我的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}]]"
答案 0 :(得分:1)
这里发生了几件事。
首先,如果您要更改要操作的内容(即过滤字段,转换数组等),则仅需要JoltTransformJSON
处理器。如果没有,您可以删除该处理器并使用ConvertRecord
直接从XML转换为CSV。您不需要中间的JSON表示形式。
第二,您的CSV与预期不符的原因是因为中间JSON具有数组作为键值。应该有XPath表达式,使您可以从数组中读取并转换为CSV行。如果您无法构建,则建议使用ScriptedRecordReader
和/或ScriptedRecordSetWriter
从序列化格式转换为复杂的内部格式,然后再转换为序列化格式。
我建议尝试直接从XML转换为CSV,然后对数据进行更改,除非在转换中丢失了必要的数据。如果是这样,可能需要其他翻译步骤。
答案 1 :(得分:0)
您的预期结果是什么? 您的书中有很多作者,因此XML转换并不容易。 将失败重定向到日志消息也可能很好,这样您就可以更好地看到它。