Я бы использовал tJavaFlex. ![введите здесь описание изображения](https://i.stack.imgur.com/binZr.png)
Настройки компонента: ![введите здесь описание изображения](https://i.stack.imgur.com/H69hs.png)
Схема tJavaFlex: ![введите здесь описание изображения](https://i.stack.imgur.com/Vj0by.png)
В начальной части используйте
String input = ((String)globalMap.get("row2.xmlField")); // get the xml Fields value
String firstTag = input.substring(input.indexOf("<")+1,input.indexOf(">"));
input = input.replace("<"+firstTag+">","").replace("</"+firstTag+">","");
int tagCount = input.length() - input.replace("</", "<").length();
int closeTagFinish = -1;
for (int i = 0; i<tagCount ; i++) {
в основной части проанализируйте имя и значение тега XML и добавьте в выходную схему эти 2 дополнительных столбца. ГЛАВНАЯ часть будет выглядеть так:
/*set up the output columns */
output.user_id = ((String)globalMap.get("row2.user_id"));
output.user_first_name = ((String)globalMap.get("row2.user_first_name"));
output.user_last_name = ((String)globalMap.get("row2.user_last_name"));
Затем мы можем вычислить пары ключ-значение для XML, не зная значений KEY.
/*calculate columns out of XML */
int openTagStart = input.indexOf("<",closeTagFinish+1);
int openTagFinish = input.indexOf(">",openTagStart);
int closeTagStart = input.indexOf("<",openTagFinish);
closeTagFinish = input.indexOf(">",closeTagStart);
output.xmlKey = input.substring(openTagStart+1,openTagFinish);
output.xmlValue = input.substring(openTagFinish+1,closeTagStart);
tJavaFlex Конечная часть:
}
Вывод выглядит так:
.-------+---------------+--------------+------+--------.
| tLogRow_2 |
|=------+---------------+--------------+------+-------=|
|user_id|user_first_name|user_last_name|xmlKey|xmlValue|
|=------+---------------+--------------+------+-------=|
|1 |foo |bar |CITY |ABC |
|1 |foo |bar |STATE |PQR |
'-------+---------------+--------------+------+--------'
person
Balazs Gunics
schedule
12.01.2015