Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Custom export from dataset to XML File

Îåêßíçóå áðü ôï ìÝëïò manosB. Τελευταία δημοσίευση από το μέλος Markos στις 21-05-2009, 12:23. Υπάρχουν 12 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-05-2009, 09:06 50681

    Custom export from dataset to XML File

    Έχουμε ένα Dataset με δύο πίνακες Customers & Orders με nested relation

    Το κάνω export σε XML με την κλασσική εντολή ds.WriteXml("d:\τεστ.xml"). Έτσι μου φτιάχνει και τα Details όπως τα θέλω στο Xml (Child nodes klp klp)

    Πως γίνεται να μην εμφανίζεται το πεδίο foreign Key CustomerID του πίνακα Orders μέσα στο XML. Δεν μπορώ να το βγάλω από το Dataset για να μην χάσω το relation. Δείτε το παρακάτω παράδειγμα από τη Northwind.

    <Customers>
        <CustomerID>ALFKI</CustomerID>
        <CompanyName>Alfreds Futterkiste</CompanyName>
        <ContactName>Maria Anders</ContactName>
        <ContactTitle>Sales Representative</ContactTitle>
        <Orders>
          <OrderID>10643</OrderID>
          <CustomerID>ALFKI</CustomerID>
          <EmployeeID>6</EmployeeID>
          <OrderDate>1997-08-25T00:00:00+03:00</OrderDate>
          <ShipCity>Berlin</ShipCity>
          <ShipPostalCode>12209</ShipPostalCode>
          <ShipCountry>Germany</ShipCountry>
        </Orders></Customers>

    ΔΕν θέλω να το φτιάξω από την αρχή το Xml, απλώς να σβήσω τα foreign Key πεδία που δεν χρειάζονται.


    Manos
  •  13-05-2009, 11:08 50682 σε απάντηση της 50681

    Απ: Custom export from dataset to XML File

    Για να μην σου γραφω αδικα κωδικα σε ενδιαφερει η λυση το να πας μετα την εξαγωγή και να διαβαζεις το xml και "manual" να εχεις δηλωσει ποια πεδια δεν σε ενδιαφερουν ωστε να τα αφερει απο το αρχειο?

    παραδειγμα (το λεω σε ψευτοκωδικα) να του λες

    open xmldocument (c:\test.xml)

    xmldocument find nodes "<customerID">,"otherFKid", ktl ktl

    delete nodes

    το αρνητικο ειναι οτι πρεπει να δηλωνεις οτι πεδιο ειναι PK ωστε να τα εντοπιζει στο XML και να τα σβηνει!

    σε ρωταω μηπως εσυ ψαχνεις την λυση Αρχικα να μην τα εξαγει καθολου ωστε να κερδιζεις και χρονο, διοτι σε αυτη την περιπτωση δεν ξερω κατι.


    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  13-05-2009, 11:23 50683 σε απάντηση της 50682

    Απ: Custom export from dataset to XML File

       Το πιο λογικό και πολύ πιο γρήγορο, είναι να μην τα εξάγει καθόλου τα πεδία που δεν με ενδιαφέρουν.
    Αλλά αν δεν υπάρχει τρόπος τι να κάνουμε θα ξανανοίξουμε το αρχείο θα κάνουμε query και θα τα σβήσουμε με το χέρι (Πολύ ταλαιπωρία βρε αδελφέSmile 


    Manos
  •  13-05-2009, 12:04 50684 σε απάντηση της 50683

    Απ: Custom export from dataset to XML File

    Δεν το έχω δοκιμάσει αλλά πιστεύω θα παίξει: Φτιάχνεις ένα δεύτερο DataSet που θα το έχεις για export σκοπούς. Αυτό το δεύτερο DataSet θα έχει μόνο τα πεδία που σε ενδιαφέρουν από κάθε πίνακα. Κατόπιν κάνεις merge:

    exportDS.Merge(originalDS, false, Ignore)

    To κόλπο είναι στο MissingSchemaAction που το θέτεις σε Ignore, οπότε θα αγνoήσει τα columns από τo originalDS που δεν υπάρχουν στο exportDS.

    Τέλος, κάνεις το WriteXml...


    Vir prudens non contra ventum mingit
  •  13-05-2009, 12:31 50685 σε απάντηση της 50684

    Απ: Custom export from dataset to XML File

    Kelman το CustomerID πεδίο που θέλω να σβήσω είναι Foreign key.

    άρα αν το σβήσω και κάνω όπως αυτό που λες χάνω το master detail στο xml file αφού χάνεται και το Data Relation

    εγώ θέλω να διατηρήσω τη δομή αλλά να φύγει το πεδίο από το τελικό xml 

    <Customers>
        <CustomerID>ALFKI</CustomerID>
        <CompanyName>Alfreds Futterkiste</CompanyName>
        <ContactName>Maria Anders</ContactName>
        <ContactTitle>Sales Representative</ContactTitle>
        <Orders>
          <OrderID>10643</OrderID>
          <CustomerID>ALFKI</CustomerID>
          <EmployeeID>6</EmployeeID>
          <OrderDate>1997-08-25T00:00:00+03:00</OrderDate>
        </Orders>
      </Customers>
      <Customers>      
      <CustomerID>cccc</CustomerID>
        <CompanyName>xxxxx</CompanyName>
        <ContactName>Maria Anders</ContactName>
        <ContactTitle>Sales Representative</ContactTitle>
        <Orders>
          <OrderID>10644</OrderID>
          <CustomerID>cccc</CustomerID>
          <EmployeeID>6</EmployeeID>
          <OrderDate>1997-08-25T00:00:00+03:00</OrderDate>
        </Orders>
    </Customers>
     


    Manos
  •  13-05-2009, 13:30 50688 σε απάντηση της 50685

    Απ: Custom export from dataset to XML File

    Sorry, δεν κατάλαβα ότι ήθελες να κρατήσεις τα details. Νόμιζα ότι απλά ήθελες να έχεις το master DataTable χωρίς τα πεδία για foreign keys.
    Vir prudens non contra ventum mingit
  •  13-05-2009, 13:38 50690 σε απάντηση της 50688

    Απ: Custom export from dataset to XML File

    No problem.

    Τελικά τι κάνουμε όμως η μόνη λύση είναι να το χτίζω εγώ το Xml ή να παιρνω ένα default export και μετά να τροποποιώ το αρχείο?

    Δεν υπάρχει κάτι πιο ellegant? 


    Manos
  •  13-05-2009, 13:53 50696 σε απάντηση της 50685

    Απ: Custom export from dataset to XML File

    Μανο να σου προτεινω κατι αλλο τοτε που δεν το εχω δοκιμασει αλλα δεν βρησκω λογο να μην "κατσει"

    κοιτα δοκιμασε να τελειωσεις την δομη στην βαση σου και οταν εισαι σιγουρος οτι τελειωσες (αν και ποτε δεν ξερεις)

    καλεσε το dataset που σε ενδιαφερει και κανε ενα export kai to xml αλλα κανε και το chema! ανοιξε το xml chema με καποιον xml editor (Stylus Studio παραδειγμα που μου αρεσει)

    και πηραξε το xml chema poυ ειναι σαν tree και σβησε μια φορα manual τα πεδια που δεν σε ενδιαφερουν απο τη θεση ακριβως που θελεις και σωσε τις αλλαγες.

    κρατα αυτο το xsd (αν θυμαμαι σωστα την καταληξη) και μετα καντο Load πανω στο Dataset poy σε ενδιαφερει και λογικα μετα αμα ξαναπεις να κανει export Μονο to XML αυτη τη φορα κανοντας χρηση του τροποποιημενου chema θα σου κανει το XML οπως ακριβως το ηθελες. δηλαδη εχεις το καλουπι το αλλαζεις λιγο και μετα απο το αλλαγμενο καλουπι παραγεις αρχεια xml.

    ελπιζω να σου κατσει δεν εχω χρονο να το δοκιμασω σε μενα sorry, αλλα προ πολλων μηνων ειχα κανει κατι τετοιο και δουλεψε απλα δεν θυμαμαι αν ηταν τα πεδια FK και αν τα εκανα hide πριν το 2ο export και απο το datagrid.


    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  13-05-2009, 14:14 50699 σε απάντηση της 50690

    Απ: Custom export from dataset to XML File

    Αρχικά σκέφτηκα ότι μπορείς να τυλίξεις το DataSet σε ένα XmlDataDocument και μετά να χρησιμοποιήσεις ένα XslCompiledTransform για να μετατρέψεις το schema του DataSet σε όποιο άλλο θέλεις εσύ. Το ζήτημα έτσι γίνεται πως θα γράψεις ένα XSLT το οποίο θα περνάει όλα τα tags εκτός από αυτά που θέλεις να κόψεις. Δεν προλαβαίνω τώρα να φτιάξω ένα κανονικό XSLT αλλά χονδρικά θα πρέπει να περιέχει δύο templates, ένα για τα CustomerID το οποίο δεν θα δημιουργεί τίποτα ως output και ένα για τις άλλες περιπτώσεις το οποίο θα περνάει ό,τι διαβάσει χωρίς αλλαγή.

    Μετά όμως θυμήθηκα ότι υπάρχουν και ... DataViews. Δεν ξέρω αν το DefaultDataView ενός πίνακα επηρεάζει και το πως αυτός σώζεται σε XML, μπορείς όμως να δημιουργήσεις ένα νέο πίνακα από ένα DataView μόνο με τις στήλες που θέλεις και να σώσεις αυτό τον πίνακα. Το κακό βέβαια είναι ότι έτσι δημιουργείς στη μνήμη ένα δεύτερο πίνακα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  13-05-2009, 14:24 50701 σε απάντηση της 50699

    Απ: Custom export from dataset to XML File

    Παναγιώτης Καναβός:
    DefaultDataView ενός πίνακα επηρεάζει και το πως αυτός σώζεται σε XML, μπορείς όμως να δημιουργήσεις ένα νέο πίνακα από ένα DataView μόνο με τις στήλες που θέλεις και να σώσεις αυτό τον πίνακα. Το κακό βέβαια είναι ότι έτσι δημιουργείς στη μνήμη ένα δεύτερο πίνακα.

    Δεν μπορώ ότι κατάλαβα το σχεπτικό σου Παναγιώτη. Να το δούμε λίγο στο δικό μου παράδειγμα. Εγώ έχω δύο πίνακες τους: Customers Και Orders απο τη Northwind. Ο Orders είναι ο detail. Εσυ λες ότι πρέπει να φτιάξω ένα dataview για τον Orders και μετά να κάνω τι. Μπορείς να γράψεις λίγο κώδικα?


    Manos
  •  13-05-2009, 18:12 50703 σε απάντηση της 50685

    Απ: Custom export from dataset to XML File

    Νομίζω ότι με λίγο LinqToXML το πρόβλημα απλοποιείται. Ρίξε μια ματιά στην XElement Class και στα members της. Είναι πολύ όμορφη!!
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  21-05-2009, 10:15 50855 σε απάντηση της 50703

    Απ: Custom export from dataset to XML File

    Ο κύβος ερρίφθη!!!!! LinqToXml it is. Όντως απλός και όμορφος κώδικας. To performance είναι ένα θέμα αλλά δεν με απασχολεί σε αυτό το Project. 
    Ευχαριστώ Markos για την πρόταση διότι ακόμα η Linq δεν μου έρχεται αυτόματα ως πρώτη λύση σε τέτοια προβλήματα. Που θα πάει θα την χωνέψουμε και αυτή. 

    Manos
  •  21-05-2009, 12:23 50861 σε απάντηση της 50855

    Απ: Custom export from dataset to XML File

    Anytime... Είναι γεγονός ότι η Linq έχει πολύ βάθος και χρειάζεται ψάξιμο. Πάντως, θεωρώ ότι μπορεί να δώσει πολλά περισσότερα από όσα έχει δώσει μέχρι σήμερα. Δε θα μου κάνει εντύπωση εάν κάποια στιγμή η Microsoft δημιουργήσει μια εξέλιξή της που να μπορεί να χρησιμοποιηθεί σε numerical methods. Δεν ξέρω αν υπάρχουν τέτοιες σκέψεις, αλλά εγώ το περιμένω.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems