# Output Google Books Library XML Files to CSV & SQL # For creating labels for new library books & SQL INSERT statements set-executionpolicy unrestricted $googleXML = Read-Host "Enter the path to the Google books xml file ( D:\AR_Middle_years.xml )"#"D:\AR_Middle_years.xml" "Enter the path to the Google books xml file ( D:\AR_Middle_years.xml )" $configDir = Read-Host "Enter the path to the configuration file ( D:\config.xml )" $outputDir = "D:\" #"Enter root directory for output ( D:\ )" #Load XML file exported from Google Books [xml]$books = Get-Content $googleXML -ErrorAction Stop #Load configuration file [xml]$config = Get-Content $configDir -ErrorAction Stop #Get Unique ID set as integer [int]$UID = $config.Configuration.UID #Set input file name without extension or path $fileNameWE = [io.path]::GetFileNameWithoutExtension($googleXML) #Create a Powershell Object from imported XML #Add the auto incrementing UID value from the configuration file $bookObj = $books.library.books.book | ForEach-Object { New-Object PSCustomObject -Property @{ "ISBN" = $_.identifier.value "Title" = $_.title "Author" = $_.contributor "Barcode" = 'e' + $UID++ } } # #concatenate SQL INSERT Statement # $biblioQuery = 'INSERT IGNORE INTO biblio ' #SQL Command, table name, ' ' blank space at the end. $biblio_copyQuery = 'INSERT IGNORE INTO biblio_copy ' $biblio_fieldQuery = 'INSERT IGNORE INTO biblio_field ' $sqlArray = @() #Initialize an empty array # #Set database column names # #biblio table $biblioID = 'bibid'; $b_COL2 = 'create_dt'; $b_COL3 = 'last_change_dt'; $b_COL4 = 'last_change_userid'; $b_COL5 = 'material_cd'; $b_COL6 = 'collection_cd'; $b_COL7 = 'call_nmbr1'; $b_COL10 = 'title'; $b_COL13 = 'author'; $b_COL19 = 'opac_flg'; $b_VAL2 = 'now()'; $b_VAL3 = 'now()'; $b_VAL4 = '1'; $b_VAL5 = '2'; $b_VAL6 = '1'; $b_VAL7 = ''; $b_VAL10 = ''; $b_VAL13 = ''; $b_VAL19 = 'Y'; #biblio_copy table $b_c_COL2 = 'copyid'; $b_c_COL3 = 'create_dt'; $b_c_COL4 = 'copy_desc'; $b_c_COL5 = 'barcode_nmbr'; $b_c_COL6 = 'status_cd'; $b_c_COL7 = 'status_begin_dt'; $b_c_COL10 = 'renewal_count'; $b_c_VAL2 = ''; $b_c_VAL3 = 'now()'; $b_c_VAL4 = ''; $b_c_VAL5 = ''; $b_c_VAL6 = 'in'; $b_c_VAL7 = 'now()'; $b_c_VAL10 = '0'; #biblio_field table $b_f_COL2 = 'fieldid'; $b_f_COL3 = 'tag'; $b_f_COL4 = 'ind1_cd'; $b_f_COL5 = 'ind2_cd'; $b_f_COL6 = 'subfield_cd'; $b_f_COL7 = 'field_data' $b_f_VAL2 = '1'; $b_f_VAL3 = '20'; $b_f_VAL4 = 'N'; $b_f_VAL5 = 'N'; $b_f_VAL6 = 'a'; #Populate $sqlArray $bookObj | ForEach-Object{ $VAL1 = $_.Barcode $VAL3 = $_.Title.replace("'","") $VAL4 = $_.Author.replace("'","") $VAL2 = $_.ISBN $sqlArray += Write-Output "/* $VAL3 by $VAL4 (Barcode: $VAL1, ISBN: $VAL2) */" $sqlArray += Write-Output $biblioQuery"("$b_COL2","$b_COL3","$b_COL4","$b_COL5","$b_COL6","$b_COL7","$b_COL10","$b_COL13","$b_COL19") VALUES ("$b_VAL2","$b_VAL3",'"$b_VAL4"','"$b_VAL5"','"$b_VAL6"','"$VAL2"','"$VAL3"','"$VAL4"','"$b_VAL19"');" $sqlArray += Write-Output $biblio_copyQuery"("$biblioID","$b_c_COL2","$b_c_COL3","$b_c_COL5","$b_c_COL6","$b_c_COL7","$b_c_COL10") SELECT biblio.bibid,'"$b_c_VAL2"',biblio.create_dt,'"$VAL1"','"$b_c_VAL6"',biblio.create_dt,'"$b_c_VAL10"' FROM biblio WHERE biblio.title = '"$VAL3"' AND biblio.author = '"$VAL4"';" $sqlArray += Write-Output $biblio_fieldQuery"("$biblioID","$b_f_COL2","$b_f_COL3","$b_f_COL4","$b_f_COL5","$b_f_COL6","$b_f_COL7") SELECT biblio.bibid,'"$b_f_VAL2"','"$b_f_VAL3"','"$b_f_VAL4"','"$b_f_VAL5"','"$b_f_VAL6"', biblio.call_nmbr1 FROM biblio WHERE biblio.title = '"$VAL3"' AND biblio.author = '"$VAL4"';" $sqlArray += Write-Output "" } # #Create Output Files # if (!(Test-Path -path $outputDir"LibraryLabels")) { New-Item $outputDir"LibraryLabels\SQL" -type directory New-Item $outputDir"LibraryLabels\CSV" -type directory Write-Host "New Directories Created:" Write-Host $outputDir"LibraryLabels\SQL" Write-Host $outputDir"LibraryLabels\CSV" } #Set the format to export the SQL Statments $sqlArray | out-file -force -Encoding "UTF8" -filepath $outputDir"LibraryLabels\SQL\"$fileNameWE"_sqlOutput_"$((Get-Date).ToString("yyyy-MM-dd")).sql #Use select to order columns and export to csv $bookObj | Select Title, Author, ISBN, Barcode | Export-Csv -NoTypeInformation -Path $outputDir"LibraryLabels\CSV\"$fileNameWE"_labelOutput_"$((Get-Date).ToString("yyyy-MM-dd")).csv # #Update Configuration File # $config.Configuration | ForEach-Object { $_.UID = $UID.ToString() } #convert from int to string $config.Save($configDir) #save xml # #Provide 15 seconds of feedback before script end # #If the path to the files the script creates exist show a success message, otherwise throw error if (!(Test-Path -path $outputDir"LibraryLabels\SQL\"$fileNameWE"_sqlOutput_"$((Get-Date).ToString("yyyy-MM-dd")).sql)-and (Test-Path -path $outputDir"LibraryLabels\CSV\"$fileNameWE"_labelOutput_"$((Get-Date).ToString("yyyy-MM-dd")).csv)) { Write-Host "Warning! Files could not be created." } ELSE { Write-Host "Success! Files Created:" Write-Host $outputDir"LibraryLabels\SQL\"$fileNameWE"_sqlOutput_"$((Get-Date).ToString("yyyy-MM-dd")).txt Write-Host $outputDir"LibraryLabels\CSV\"$fileNameWE"_labelOutput_"$((Get-Date).ToString("yyyy-MM-dd")).csv } #Confirm that UID has been correctly incremented and is written to the configuration file Write-Host UID in configuration file updated to: $config.Configuration.UID #After messages are written to the console, sleep for 15 seconds then -END Start-Sleep -s 15 # #Example Configuration File # # # # 8231 #