Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Reading XML met bashscript en import in Mysql

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben niet gewoon om bashscripts te schrijven en dus loopt onderstaande script danig in de war.
Op lijn 6 zit een error in de for-lus maar kan niet achterhalen wat het probleem juist is ...
Dagelijks ontvang ik een xml.xml die ik via een bashscriptje op een Debian-server laat verwerken. Het is de bedoeling dat de velden die ik uitlees uit de XML gebruikt worden om te importeren in een Mysqldatabank met bestaande tabellen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
FILE="/transfer/store/xml.xml"
RESULT=$(xmlstarlet sel -t -v "count(//Appointment)" $FILE)
_DB_TABLE_PERSONS="persons"
_DB_TABLE_INVITATIONS="invitiations"
FOR (( i=0; i<$RESULT; i++ )) ; DO
PFIRST_NAME="$(xmlstarlet sel -t -v //Appointment[${i}+1]/person-info/data1 $FILE)"
PLAST_NAME="$(xmlstarlet sel -t -v //Appointment[${i}+1]/person-info/data2 $FILE)"
PADDRESS="$(xmlstarlet sel -t -v //Appointment[${i}+1]/person-info/data3 $FILE)"
PTELEPHONE="$(xmlstarlet sel -t -v //Appointment[${i}+1]/person-info/data4 $FILE)"
PEMAIL="$(xmlstarlet sel -t -v //Appointment[${i}+1]/person-info/email $FILE)"
VALUES(NULL,'${FIRST_NAME}','${LAST_NAME}','${ADDRESS}','${TELEPHONE}','${EMAIL}');"
QUERY="INSERT INTO ${_DB_TABLE_PERSONS} ('id','first_name','last_name','address','telephone','email') VALUES(NULL,'${PFIRST_NAME}','${PLAST_NAME}','${PADDRESS}','${PTELEPHONE}','${PEMAIL}');"
mysql --host=10.1.12.69 --user=test --password=test --database=test < $QUERY
ID_PERSONS=$(mysql --host=10.1.12.69 --user=test --password=test --database=test -se "SELECT LAST_INSERT_ID()")
IREMARK="$(xmlstarlet sel -t -v //Appointment[${i}+1]/person-info/data5 $FILE)"
ELAST_NAME="$(xmlstarlet sel -t -v //Appointment[${i}+1]/transfer-info/name $FILE)"
ID_EMPLOYEES=$(mysql --host=10.1.12.69 --user=test --password=test --database=test -se "SELECT id FROM employees WHERE last_name=${ELAST_NAME}")
LNAME="$(xmlstarlet sel -t -v //Appointment[${i}+1]/transfer-info/locatiebenaming $FILE)"
ID_LOCATIONS=$(mysql --host=10.1.12.69 --user=test --password=test --database=test -se "SELECT id FROM locations WHERE UCASE(name) like '%${ELAST_NAME}%'")
ID_I_TEMP="$(xmlstarlet sel -t -v //Appointment[${i}+1]/Date $FILE)"
IT_I_TEMP="$(xmlstarlet sel -t -v //Appointment[${i}+1]/Time/Begin $FILE)"
IDATE_INVITATION=${ID_I_TEMP:0:4}-${ID_I_TEMP:4:2}-${ID_I_TEMP:6:2}
IEXPIRATION_DATE=${IT_I_TEMP:0:2}-${IT_I_TEMP:2:2}
QUERY="INSERT INTO ${_DB_TABLE_INVITATIONS} ('id','person','employee','location','date_invitation','time_invitation','notification','remark') VALUES(NULL,'${PFIRST_NAME}','${PLAST_NAME}','${PADDRESS}','${PTELEPHONE}','${PEMAIL}');"
mysql --host=10.1.12.69 --user=test --password=test --database=test < $QUERY
DONE


XML:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?xml version="1.0" encoding="utf-8"?>
<transfer-export xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Appointment>
   <Date>20130409</Date>
   <Time>
     <Begin>1830</Begin>
     <End>1900</End>
   </Time>
   <person-info>
     <data1>bla</data1>
     <data2>m00</data2>
     <data3>street 10</data3>
     <data4>0000/000000</data4>
     <data5>subject</data5>
     <info>remarks</info>
     <email></email>
     <sms></sms>
   </person-info>
   <transfer-info>
     <dcode>BARBRE5</dcode>
     <name>TESTPERSON</name>
     <locatiebenaming>TESTLOCATION</locatiebenaming>
     <locatieID>3702</locatieID>
     <entryid>45784139</entryid>
   </transfer-info>
</Appointment>
<Appointment>
   <Date>20130412</Date>
   <Time>
     <Begin>1600</Begin>
     <End>1730</End>
   </Time>
   <person-info>
     <data1>bla2</data1>
     <data2>m002</data2>
     <data3>street 666</data3>
     <data4>0000000000</data4>
     <data5>andere</data5>
     <info></info>
     <email>mailaddress2</email>
     <sms></sms>
   </person-info>
   <transfer-info>
     <dcode>BIRBRE5</dcode>
     <name>TESTPERSON2</name>
     <locatiebenaming>TESTLOCATION2</locatiebenaming>
     <locatieID>5802</locatieID>
     <entryid>4578487</entryid>
   </transfer-info>
</Appointment>
</transfer-export>

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Is dit bash-scriptje van jezelf?

Hoewel geen antwoord op je vraag, maar wellicht maak je het jezelf makkelijker als je dit gewoon via een Python/Ruby scriptje oplost? Bash is fijn en prima, maar 'the right tool for the right job' is het in dit geval niet echt.

Als het goed is draait er gewoon Python/Ruby op je Debian :)

Engineering is like Tetris. Succes disappears and errors accumulate.