Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ApacheNIFI中转换XML_Xml_Xslt_Xml Parsing_Apache Nifi_Xslt Grouping - Fatal编程技术网

如何在ApacheNIFI中转换XML

如何在ApacheNIFI中转换XML,xml,xslt,xml-parsing,apache-nifi,xslt-grouping,Xml,Xslt,Xml Parsing,Apache Nifi,Xslt Grouping,在NiFi中,我有一个处理器ExecuteSQL,它返回以下内容 person_id| name | adress 01 | John | Street 01 01 | John | Street 02 02 | Deby | Street 01 请注意,Adress与Person是不同的表,因此左联接最终会复制值 在Nifi中,我将AVro转换为Json,然后转换为XML,结果如下: <person> <person_id>

在NiFi中,我有一个处理器ExecuteSQL,它返回以下内容

person_id| name | adress 
01       | John | Street 01 
01       | John | Street 02
02       | Deby | Street 01
请注意,Adress与Person是不同的表,因此左联接最终会复制值

在Nifi中,我将AVro转换为Json,然后转换为XML,结果如下:

<person>
  <person_id>01</person_id>
  <name>John</name>
  <address>Street 01</address>
</person>
<person>
  <person_id>01</person_id>
  <name>John</name>
  <address>Street 02</address>
</person>
<person>
  <person_id>02</person_id>
  <name>Deby</name>
  <address>Street 01</address>
</person>

01
约翰
01街
01
约翰
02街
02
黛比
01街
然而,我期望的结果是:

<person>
  <person_id>01</person_id>
  <name>John</name>
  <addresses>
    <address>Street 01</address>
    <address>Street 02</address>
  </addresses>
</person>
<person>
  <person_id>02</person_id>
  <name>Deby</name>
  <addresses>
    <address>Street 01</address>
  </addresses>
</person>

01
约翰
01街
02街
02
黛比
01街
可以在Nifi中进行吗?我似乎找不到任何合适的处理器,我应该使用XSLT(与转换XML处理器一起使用)吗?写我自己的处理器?我该怎么做


我是NiFi的新手,如有任何帮助,我将不胜感激。

您可以采取以下几种方法:

  • 在转换为XML之前用JSON进行转换——处理器处理复杂的转换,并有更多关于该过程的文档(以及)
  • 使用XSLT进行转换——如果您对XSLT更熟悉,可以使用XSLT进行转换。有很多方法可以帮助您设计XSLT
  • 编写Groovy脚本——如果转换逻辑很难在Jolt或XSLT中编写,那么在中编写Groovy脚本可能是最简单的解决方案。Groovy的XML处理非常简洁,允许使用映射/对象类型进行强大的操作。如果Jolt或XSLT规范非常重要,那么这就是我的建议
  • 编写一个定制处理器——如果您构建了一个运行良好的脚本,您可以将该代码迁移到定制处理器,以获得长期的好处(性能改进、可部署性、版本控制、可配置性等)。我有一个关于开发定制处理器的过程

  • 非常感谢你的回答。我看过你们关于定制处理器的幻灯片,我有一个问题,我可以在定制处理器项目中添加外部lib(比如Jolt lib/jar)吗?可以。只需将它声明为自定义处理器包中的Maven依赖项,就像对任何其他项目一样。在xml上还可以使用
    JoltTransferMRecord