Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Παιδια θελω να ενωσω περιπου 1000 xml αρχεια... Ολα ηταν στο ιδιο αρχειο και τα εκανα unzip. Επισης τα εχω τσεκαρει και εχουν ιδιο αριθμο και ονομα στηλων ολα, οταν τα βλεπω σαν πινακες. Ουσιαστικα θελω να τα ενωσω ολα μαζι και να γινει ενας πελωριος πινακας, ωστε μετα να εξαγω δεδομενα που θελω με αθροισματα κτλ. Πως μπορει να γινει? Να πω οτι δεν εχω ιδεα απο xml παρα μονο απο sql και java και html σε ενα βαθμο, εαν μπορω να βοηθηθω απο αυτες?

 

Δημοσ.

Καθε xml αρχειο εχει μεσα απο εναν πινακα με δεδομενα, ολοι οι πινακες απο ολα τα xml εχουν ιδιες στηλες... Θελω ουσιαστικα να τα κανω ενα αρχειο xml δλδ. εναν πινακα.

Δημοσ.

Τι μέγεθος έχουν όλα τα XML μαζί? όχι ότι παίζει ιδιαίτερο ρόλο, δεν ειναι δύσκολο να γίνει αυτό που θες... ακόμα και με copy - paste το κάνεις. Εκτός και αν δεν έχω καταλάβει τι θες να κάνεις :P

 

Επίσης αφού ξέρεις Java μπορείς να χρησιμοποιήσεις το Apache POI και να δουλέψεις κατευθείαν πάνω στο "zip".

Δημοσ.

Aν κανω copy paste τον κωδικα ουσιαστικα φανταζομαι θα επαναμβανονται καθε φορα οι στηλες. Ειναι περιπου 1gb. Aν το κανω copy paste επισης σημαινει οτι πρεπει να το κανω 1000 φορες οποτε δν συμφερει

Δημοσ.

Aν κανω copy paste τον κωδικα ουσιαστικα φανταζομαι θα επαναμβανονται καθε φορα οι στηλες. Ειναι περιπου 1gb

Πρέπει να μας δείξεις ένα παράδειγμα απο τα XML για να καταλάβουμε καλύτερα. Απλά το XML έχει elements, δεν έχει στήλες, οπότε μπερδεύει λίγο έτσι όπως το γράφεις.

 

Anyway, αυτό που θες ακούγεται πολύ απλό να γίνει με XQuery. Είναι και λιγότερο απλό να γίνει με XML parsers/writers σε Java. Δεν ξέρω αν γίνεται αλλιώς αλλά και αν αξίζει να μάθεις ολόκληρη γλώσσα για να το κάνεις :P

 

Ένα θέμα είναι ότι αν όλα τα XML είναι 1GB στην μνήμη θα πίανουν πολύ παραπάνω, ανάλογα τον parser / εργαλείο. Αυτό θα το δεις στην πράξη

Δημοσ.

για να καταλάβουμε πρέπει λίγο να καταλάβεις και εσύ τι ακριβώς θέλεις.

Το xml αρχείο δεν περιέχει πίνακες , περιέχει διάφορα tags. Αν όλα τα αρχεία αρχίζουν και τελειώνουν με τα ίδια μπορείς απλά να γράψεις κάτι σε java που διαβάζει ένα αρχείο και το γράφει σε ένα άλλο. Οπότε όταν τελειώσεις θα έχεις ένα μεγάλο αρχείο xml που περιέχει όλα τα tags. Απλά κοίταξε μήπως έχει tags που επαναλμβάνονται σε κάθε αρχείο και δεν πρέπει να τα βάζει μέσα στο ένα που θα τα περιέχει ολα και χαλάσεις την δομή του xml

Δημοσ.

Πρέπει να μας δείξεις ένα παράδειγμα απο τα XML για να καταλάβουμε καλύτερα. Απλά το XML έχει elements, δεν έχει στήλες, οπότε μπερδεύει λίγο έτσι όπως το γράφεις.

Anyway, αυτό που θες ακούγεται πολύ απλό να γίνει με XQuery (Update). Είναι και λιγότερο απλό να γίνει με XML parsers/writers σε Java. Δεν ξέρω αν γίνεται αλλιώς αλλά και αν αξίζει να μάθεις ολόκληρη γλώσσα για να το κάνεις :P

Δεν υπαρχει πιο απλος τροπος? Γιατι πες οτι τα queries τα βρισκω πρεπει την διαδικασια να την κανω πολλες φορες και ειναι και μεγαλος ο ογκος των δεδομενων. Σκεφτηκα να τα μετατρεψω σε βαση δεδομενων sql και εκει να δουλεψω αλλα δν ξερω αν αξιζει. Προκειται για xml με στοιχεια απο επιχειρησεις κτλ. και ειναι ουσιαστικα διαχωρισμενα ανα χρονικες περιοδους ανα αρχειο xml

Παιδια δειτε λιγο το λινκ ανεβασα ενα παραδιεγμα https://ufile.io/d949f

Δημοσ.

Δεν υπαρχει πιο απλος τροπος? Γιατι πες οτι τα queries τα βρισκω πρεπει την διαδικασια να την κανω πολλες φορες και ειναι και μεγαλος ο ογκος των δεδομενων. Σκεφτηκα να τα μετατρεψω σε βαση δεδομενων sql και εκει να δουλεψω αλλα δν ξερω αν αξιζει. Προκειται για xml με στοιχεια απο επιχειρησεις κτλ. και ειναι ουσιαστικα διαχωρισμενα ανα χρονικες περιοδους ανα αρχειο xml

Παιδια δειτε λιγο το λινκ ανεβασα ενα παραδιεγμα https://ufile.io/d949f

 

Ωραία απο ότι βλέπω τα elements που σε ενδιαφέρουν είναι τα <Filing> οπότε θεωρητικά μπορείς να αφήσεις ένα <PublicFilings> element στο τελικό XML και να κάνεις copy paste όλα τα Filings το ένα κάτω απο το άλλο. Υποθέτω το κάθε Filing είναι unique. Πιο απλό δεν νομίζω να γίνεται. Μετά για να διαβάσεις τα στοιχεία πρέπει να γνωρίζεις XPATH ώστε να ζητήσεις τα elements που σε ενδιαφέρουν. Αλλιώς τα μετατρέπεις σε SQL μετά αν σε βολεύει. Εγώ που ξέρω Xpath / XQuery θα το έκανα εύκολα με αυτα τα δύο, και μετά με λίγο effort, export σε HTML.

Δημοσ.

Δεν καταλαβαίνω το να κάνεις append είναι εύκολο . Είτε με command line είτε με κάποιο file merge utility

 

Με notepad++ κάνεις remove πολύ εύκολα το public fillings σε όλα τα αρχεία. Μετα προσθέτεις το ανοιγμα στο πρώτο και το κλείσιμο στο τελευταίο και τα κάνεις merge

Δημοσ.

Το θεμα μου ειναι οτι ειναι 1000 τετοια περιπου αρχεια και εκτος αυτου δεν ξερω xml programming...  Για να κανω αυτη την διαδικασια με copy paste και delete θα μου φαει πολυ χρονο και θα βγαλω τα ματια μου... Θελω κατι απλο πχ να τα φορτωσω καπου και να δωσω εντολες οπως ξερω με mysql στεκει αυτο?

Δημοσ.

Το θεμα μου ειναι οτι ειναι 1000 τετοια περιπου αρχεια και εκτος αυτου δεν ξερω xml programming...  Για να κανω αυτη την διαδικασια με copy paste και delete θα μου φαει πολυ χρονο και θα βγαλω τα ματια μου... Θελω κατι απλο πχ να τα φορτωσω καπου και να δωσω εντολες οπως ξερω με mysql στεκει αυτο?

Δεν είπαμε να γίνει manually με το χέρι, μπορεί π.χ να γίνει append με ένα for loop απο python, bash ή απο bat αρχεία σε Windows, ή σε όποια γλώσσα σε βολεύει, και μετά με ένα εργαλείο π.χ editpad να γίνει delete το <PublicFilings>

 

Για να τα διαβάσεις μετά τα δεδομένα συμφωνώ, θες κάτι να σε βολεύει, ίσως κάτι σαν αυτό ? https://dev.mysql.com/doc/refman/5.5/en/load-xml.html

Δημοσ.

Δεν είπαμε να γίνει manually με το χέρι, μπορεί π.χ να γίνει append με ένα for loop απο python, bash ή απο bat αρχεία σε Windows, ή σε όποια γλώσσα σε βολεύει, και μετά με ένα εργαλείο π.χ editpad να γίνει delete το <PublicFilings>

 

Για να τα διαβάσεις μετά τα δεδομένα συμφωνώ, θες κάτι να σε βολεύει, ίσως κάτι σαν αυτό ? https://dev.mysql.com/doc/refman/5.5/en/load-xml.html

Οκ θα το προσπαθησω σε java ευχαριστω για τη βοηθεια

Δημοσ.

Οκ θα το προσπαθησω σε java ευχαριστω για τη βοηθεια

OK, απλώς σαν γενική παρατήρηση, δεν είναι όλα τα εργαλεία για την ίδια δουλειά. Δεν ξέρω πόσο εύκολα θα το γράψεις σε Java, με λίγο Googling και Stackoverflow μπορεις π.χ να βρεις πως να το κάνεις απο bash με cat και pipes.

 

Σου δίνω και ένα παράδειγμα σε XQuery script (BaseX syntax) που έγραψα σε λιγότερο απο 2 λεπτά

let $path := "/home/luciddream/tmp/files/"
let $target := "/home/luciddream/tmp/result.xml"
let $fileNames := file:list($path, true(), "*.xml")
let $result := 
<PublicFilings>{
for $fileName in $fileNames
return doc($path || $fileName)//Filing
}</PublicFilings>
return file:write($target, $result, map { "method": "xml"})

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...