Создать XML через файл CSV вход


Цель : создать XML-файл из файла CSV

Я пытаюсь создать XML-файл от CSV-файл , XML-файл содержит заголовок , нижний колонтитул и тела .

Я создал 3 разных функции.

Входной файл CSV

name,value,amt,position,qnty
abc,2,3,4,5
cde,7,8,9,10
abc,12,13,14,15
cde,7,8,9,10

Код для создания XML из выше CSV-файл

  #!/usr/bin/sh

  FILENAME=$1
   #create body of xml file
   createBody()
   {
    echo ${FILENAME}

    while read var
    do
       filename=`echo $var | sed 's/ /_/g'`
       echo "<abc:archivingGroup xc:value=\"$var\">" >> ${filename}_Fixings.xml
      #create files for each unique group from groups.txt file
       grep $var ${FILENAME} > $filename.txt
      #traverse each file and create a separate xml file for each group
       while IFS=\; read a b c d e
       do
           TEST=$(cat <<EOF
                  <abc:index xc:value="$b">
                   </abc:index>
                    )
            echo $TEST >>  ${filename}_Fixings.xml
       done < $filename.txt
       rm $filename.txt
       echo "</abc:archivingGroup>" >> ${filename}_Fixings.xml
     done < Groups.txt

    }

  #header is common is all files
   createHeader()
       {
        filename=$1
        Header=$(cat << EOF
            <abc:Main>
            <abc:sub>
            <abc:head>
       )

     echo $Header > ${filename}_Fixings.xml

   }

  #footer is common in all files
  createFooter()
   {
      filename=$1;
      Footer=$(cat <<EOF
              </abc:Main>
              </abc:sub>
              </abc:head>
        )
     echo $Footer >> ${filename}_Fixings.xml
   }


  createarchFile()
  {
   IFS=\|
   #creates the unique groups (abc,cde as per above file)
   awk -F";" '{print $1}' ${FILENAME} | sed 1d | sort | uniq > Groups.txt
    #add header to each file, each uniq group is treated as a separate file
    while read var
    do
      filename=`echo $var | sed 's/ /_/g'`
      createHeader $filename
    done < Groups.txt

    #create body for all the files , header for all the files is appended above
    createBody

    #add footer to each file,each uniq group is treated as a separate file
    while read var
    do
      filename=`echo $var | sed 's/ /_/g'`
      createFooter $filename
    done < Groups.txt
  }
  createarchFile 

Приведенный выше код создает XML-файл, взяв CSV-файла в качестве входных данных

  1. Он принимает уникальные имена из файла и сохраняет в Groups.txt файл

  2. Создает XML для всех групп, имеющихся в Groups.txt

  3. Траверс через каждый файл группы и создать заголовок

  4. Траверс через каждую группу файлов и создания тела

  5. Траверс через каждый файл группы и создать нижний колонтитул

Надеюсь, это понятно.

Пожалуйста, предложите, если это правильный подход , а есть другой способ, чтобы создать XML или это требует каких-либо изменений



120
1
задан 10 апреля 2018 в 06:04 Источник Поделиться
Комментарии