Объединение строк в XML-данных с помощью Bash

Я пытаюсь опубликовать XML в API с Bash. Некоторые XML-данные не могут вернуть правильный ответ, так как структура этих файлов неверна. и причина этого пробела между специальной строкой, если строка имеет длину более 80 столбцов, то строка продолжается от новой строки и оставляется «незамкнутыми» тегами xml. помогите решить это дело.

Мне нужно объединить строки в теге «onedictvalue>» (13 строк) или удалить пробел между символами «]» (15 строк).

Может быть, есть код установки, который не ограничивает размер столбца до 80?

XML тело

<?xml version="1.0"?>
 <document>
   <function name="catalogAddRecord">
     <param name="ittinbalasy">545</param>
     <param name="atananalet">45464</param>
     <param name="albasty">29417</param>
     <param name="zheksuryn">4</param>
     <param name="onbagan">999</param>=
     <param name="dictrecords">
       <onedictvalue>
         <fieldid>12439</fieldid>
         <values>
           <value><![CDATA[Блаала/Есин барда елинди тап/Кырсык келсе су куриды
 нционного ввывыв/Департа/Управление вывывввввввввыыыыыыыввввввввввввввввввыв и
  работы с кукуку йцйцыфыфыф/Отывававвававаывыыыыыыыыыыыыыыыыыыывывы/Группа №4]
 ]></value>
         </values>
       </onedictvalue>
     </param>
   </function>
   <client name="InternalSite" version="0.01"/>
 </document>

Всего 2 ответа


Эта задача решается путем установки кода при инициализации conect для oracle, чтобы получить данные XML из столбца lob. Стандартное соединение заняло 80 символов в строке, теперь 700. Спасибо всем за внимание.

data="$(
$DBCLPATH/sqlplus -s $DBUSER@$DBNAME/****<<EOF
set head off
**SET LINESIZE 700**
select to_char(d."depts".getCLOBVal())||'' AS xml_val FROM dwh_stage.motiw_insert_rows d WHERE rownum < 20;
EOF
)"

Обычно я бы предложил использовать XML-парсер, такой как xmlstarlet или что-то в этом порядке. Но так как вы работаете с испорченными файлами XML, CDATA не закрывается из-за неприятного перевода строки, я мог бы предложить что-то вроде этого:

$ cat file.xml | tr '
' '' | sed 's/]
?x0]>/]]>/g' | tr '' '
'

Есть идеи?

10000