NiFi - Как удалить окружающие двойные кавычки из содержимого FlowFile - PullRequest
1 голос
/ 13 июня 2019

Я получаю файлы данных от Kafka в формате XML или AVRO. Каждое сообщение заключено в двойные кавычки (например, "..."). Я хочу использовать NiFi для удаления двойных кавычек, окружающих содержимое.

Я не могу использовать процессор ReplaceText для удаления всех двойных кавычек, поскольку некоторые теги используют двойные кавычки в своих атрибутах.

Я пытаюсь использовать процессор ExtractText, но, насколько я понимаю, выходные данные регулярного выражения будут помещены в атрибут, а не заменят содержимое FlowFile. Кроме того, я не уверен, что написать для регулярного выражения, потому что мне нужно будет использовать длину содержимого, чтобы удалить первый и последний символы. Кроме того, я не могу использовать имена тегов в регулярном выражении, потому что мне нужно сделать то же самое с другим содержимым.

Вот пример того, как XML-файл настроен с окружающими двойными кавычками, а некоторые теги используют атрибуты с двойными кавычками.

"<?xml version="1.0" encoding="UTF-8" standalone="yes"?><t1:Foo1><t2:Foo2 reportIndicator="...">...</t2:Foo2></t1:Foo1>"

Я ожидаю использовать процессор ConsumeKafka_0_10 (работает нормально), который выводит FlowFile с xml, содержащим содержимое в двойных кавычках, в другой процессор (ExtractText?), Выводя FlowFile с xml без окружающего содержимого в двойных кавычках, в процессор PutFile (работает) отлично).

Открыт и для других предложений! Я также думал о добавлении процессора для выполнения некоторого кода, если бы он мог редактировать файл. Хотя кажется грязным.

1 Ответ

2 голосов
/ 13 июня 2019

Если вы уверены, что контент начинается и заканчивается на ", вы можете удалить его с помощью процессора ReplaceText и оставить «внутренний» ".

  • Значение поиска: ^"(.*)"$ (это означает, что группа захвата «чего-либо» должна быть заключена в двойные кавычки в точном начале и конце содержимого)
  • ЗаменаЗначение: $1 (это означает замену контента группой захвата, которая исключает начальную и конечную ")
...