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

 

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

Apo asp se aspx mesw xml ..?

Îåêßíçóå áðü ôï ìÝëïò H-3-X. Τελευταία δημοσίευση από το μέλος H-3-X στις 10-03-2006, 11:59. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-03-2006, 23:28 10488

    Indifferent [:|] Apo asp se aspx mesw xml ..?

    Xairetw apantes!

    Exw anaptyksei mia web efarmogh gia diaxeirish dedomenwn kai reporting gia etairies engineering consultancy. Olh h efarmogh einai grammenh se ASP.NET kai VB.NET. Prosfata prosethesa ena GIS interface gia to opoio egrapsa polla tools se javascript. To kako einai oti logw tou GIS engine pou xrhsimopoiw (Manifold) h selida me to interface einai asp. Den exoun vgalei akoma web control gia asp.net(isws mexri to kalokairi..). Mia apo tis leitourgeies sth selida afth (asp) einai h dynatothta apo to xrhsth na epilegei antikeimena sto xarth kai na vlepei info gia afta. Eidikotera gia kapoia antikeimena tou xarth (freatia parakolouthisis, stathmoi sulloghs dedomenwn klp) mporei o xrhsths na ta epilegei kai na ta prowthei gia peretairw erevna stis aspx selides. Afto ginetai mesw dhmiourgias enos xml arxeiou pou swzetai sto Mappath kathe fora pou o xrhsths epilegei kati kai sth synexeia anakaleitai apo ena Datagrid se mia aspx selida.

    To xml file einai ths morfhs:


    <data>
    <item>
    <cell name="POINT" value="p1"/>
    <cell name="CATEGORY" value="C1"/>
    </item>
    <item>
    <cell name="POINT" value="p2"/>
    <cell name="CATEGORY" value="C1"/>
    </item>
    <item>
    <cell name="POINT" value="p3"/>
    <cell name="CATEGORY" value="C2"/>
    </item>
    </data>

    To arxeio afto swzetai ws (selection.xml)  sto Mappath mesw fso

    <%
    ....

    ....
    var rs = mapserver.ResultXml; //Na eksigisw. Edw dhmiourgeitai to recordset mou. To mapserver Object dhmiourgeitai

                                                 //apo ena GIS engine sto server. ResultXml einai mia property tou mapserver pou epistrefei

                                                //apotelesmata apo ena spatial query se morfh xml.

    MyFile = Server.Mappath("selection.xml");
    var fso = Server.CreateObject("Scripting.FileSystemObject");
    var a = fso.CreateTextFile(MyFile,true);
    a.Write(rs);

    ..%>

    Sth synexeia kai mesw mias aspx selidas prospathw na diavasw to selection.xml
    To provlima einai oti enw gia na to diavasw se ena xml tag prepei na xrhsimopoihsw ena xslt gia transformation kai ola einai ok, gia na to diavasw se ena datagrid den ginetai kateutheian giati den einai normalized xml arxeio.
    Dhladh to :

    <SPAN class=postbody>

    DataSet ds = new DataSet()
    ds.ReadXml(MapPath("selection.xml"), XmlReadMode.Auto )
    DataGrid1.DataSource = ds.Tables("cell")
    DataGrid1.DataBind()


    den pezei dioti epistrefei ola ta periexomena se morfh :

    ItemID    name    value
    1            POINT     p1
    1        CATEGORY  C1
    2            POINT     p2
    2        CATEGORY  C1
    3            POINT     p3
    3        CATEGORY  C2

    Afto pou thelw omws einai :

    POINT CATEGORY
       P1          C1
       P2          C2
       P3          C3 

    To provlima  yfistatai arxika giati to XmlDocument den ypostirizei IEnumerable.

    Mi lysh pou skeftomai einai  kata kapoio tropo na exw 2 template columns sto datagrid (POINT kai CATEGORY) kai na pernei to kathena data (bind) isws kapws etsi:
    <%#(Ctype(Container.DataItem, System.Xml.XmlNode))("ElementName").InnerText %>

    na kanw dhladh bind sta nodes to xmldocument. Gia na ginei afto omws prepei na kanw select ta nodes. Apo oti exw katalavei h XmlNode class exei mia method SelectNodes kai epistrepfei ena object XmlNodeList to opoio einai mia syllogh pou yposthrizei IEnumerable! Profanws to parapanw tha ginei me xrhsh XPath.

    Ws edw exw ftasei kai ... to palevw

    Idees kalodexoumenes...

    Indifferent <img src=" src="/cs/emoticons/emotion-8.gif">Indifferent <img src=" src="/cs/emoticons/emotion-8.gif">Indifferent <img src=" src="/cs/emoticons/emotion-8.gif">



     


    PROOF by CONTRADICTION
  •  09-03-2006, 01:22 10491 σε απάντηση της 10488

    Απ: Apo asp se aspx mesw xml ..?

    Κάτι τα greeklish, κάτι το μέγεθος του post, δεν νομίζω ότι κατάλαβα τί λες. Μήπως θα έπρεπε να το γράψεις λίγο πιο σύντομο και στα Ελληνικά? Προσπαθώ να το διαβάσω και με έπιασε πονοκέφαλος! (Εντάξει, τον είχα ήδη αλλά χειροτέρεψε).

    Απ' ότι κατάλαβα, το XML που θέλεις να χρησιμοποιήσεις είναι προβληματικό. Το schema που χρησιμοποιείς φαίνεται ότι ορίζει απλά τα πεδία ενός grid, χωρίς συγκεκριμένη σειρά. Θα μπορούσε π.χ. άνετα το ένα πεδίο να περιέχει πρώτα ένα item CATEGORY και μετά το POINT. Καλύτερα θα ήταν να χρησιμοποιήσεις ένα XSLT για να το σουλουπώσεις πριν το χρησιμοποιήσεις. To IEnumerable πάντως δεν κατάλαβα που κολλάει.

    Υποθέτω ότι χρησιμοποιείς το GIS της Manifold, καθώς βρήκα αναφορές στο MapServer.ResultXML μέσω του Google. Στο παρακάτω link http://www.pinetoprairie.org/phpBB2/viewtopic.php?p=1272&sid=7aabeb3b02dae59e743d52b829591c06 νομίζω συζητάνε κάτι παρόμοιο με αυτό που θέλεις να κάνεις κι εσύ.  Χρησιμοποιώντας το παράδειγμα του άρθρου, έφτιαξα το παρακάτω XSLT:



    <xsl:stylesheet xmlns:xsl="<A href="http://www.w3.org/1999/XSL/Transform">http://www.w3.org/1999/XSL/Transform</A>" version="1.0">
     <xsl:output method="xml"/>
     <xsl:template match="data">
      <data>
       <xsl:apply-templates select="item"/>
      </data>
     </xsl:template>
     <xsl:template match="item">
      <item>
       <Point><xsl:value-of select="cell[@name='POINT']/@value" /></Point>
       <Category><xsl:value-of select="cell[@name='CATEGORY']/@value" /></Category>
      </item>
     </xsl:template>
    </xsl:stylesheet>

    Το οποίο μετατρέπει το αρχικό XML στην παρακάτω μορφή:



    <?xml version="1.0" encoding="utf-8"?>
    <data>
     <item>
      <Point>p1</Point>
      <Category>C1</Category>
     </item>
     <item>
      <Point>p2</Point>
      <Category>C1</Category>
     </item>
     <item>
      <Point>p3</Point>
      <Category>C2</Category>
     </item>
    </data>

    Απ' ότι είδα πάντως, το Manifold δουλεύει και σαν WMS server. Μήπως θα ήταν καλύτερα να κάνεις τα queries καλώντας τον WMS server σαν web service?


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-03-2006, 20:01 10525 σε απάντηση της 10491

    Απ: Apo asp se aspx mesw xml ..?

    Συγνώμη για τα greeklish αλλά ήμουν σε Η/Υ χωρίς Ελληνικά.

    Ευχαριστώ για την απάντηση σου.

    Καταρχήν  το IEnumerable κολλάει στο ότι το Datagrid δεν διαβάζει σωστά απευθείας xml αρχεία αν δεν είναι σε μια μορφή όπως αυτή που μετέτρεψες εσύ το αρχικό xml. Αν δηλαδή δοκιμάσω να διαβάσω να κάνω bind μια template column στα nodes του αρχείου (πχ στο value), αυτό που θα πάρω είναι :

    p1

    c1

    p2

    c1

    p3

    c2

    Ο μόνος τρόπος να το διαβάσω σε μια aspx σελίδα είναι χρησιμοποιώντας ένα xml tag, το οποίο χρειάζεται 2 παραμέτρους :

    DocumentSource : το αρχείο xml στην αρχική του μορφή

    TransformSource : το αρχείο xslt που απαιτείται για να διαβαστεί σωστά το xml. (σαν αυτό που προτείνεις)

    To πρόβλημα μου είναι ότι θέλω να το διαβάσω "σωστά" σε ένα Datagrid.

    Μπορεί να ακουστεί χαζό αλλά δεν έχω καταλάβει ακριβώς πως μπορώ να μετατρέψω το αρχικό xml πρακτικά "on the fly" κάθε φορά που δημιουργείται (όταν δηλαδή ο χρήστης επιλέγει κάποια points στο χάρτη). Το xslt λειτουργεί σαν φίλτρο του αρχικού xml και το φέρνει στην επιθυμητή μορφή αλλά το Datagrid δεν ζητάει xslt για να διαβασει xml αρχεία, γι'αυτό και δεν μπορώ να το διαβάσω σωστά.

    Ευχαρίστω και πάλι

     


    PROOF by CONTRADICTION
  •  10-03-2006, 00:43 10537 σε απάντηση της 10525

    Απ: Apo asp se aspx mesw xml ..?

    Το πρόβλημα δεν είναι στο datagrid αλλά στο xml αρχείο. Έτσι όπως είναι γραμμένο, ΤΙΠΟΤΑ δεν καθορίζει ότι το πρώτο item είναι point και το δεύτερο category. Όπως και να δοκιμάσεις να το δείξεις, θα έχεις το ίδιο πρόβλημα, είτε μιλάμε για .NET είτε για Java είτε για VB6.

    Αυτό που έχεις είναι ένα μάτσο items, που περιέχουν κάποια cells σε απροσδιόριστη σειρά, τα οποία με τη σειρά τους έχουν δύο attributes, το name και το value. Το τί περιέχουν τα attributes είναι επίσης απροσδιόριστο.

    Για να μπορέσεις να το χρησιμοποιήσεις θα πρέπει να το φέρεις σε μία άλλη μορφή.



    Τώρα, το datagrid δέχεται ένα Dataset, όχι απευθείας ένα XML. Αν θέλεις να φορτώσεις ένα αρχείο XML στο Dataset, το φορτώνεις όπως έκανες με την ReadXml. Αν θέλεις να εκτελέσεις ένα transformation στο XML πριν το χρησιμοποιήσεις, θα πρέπει να χρησιμοποιήσεις την κλάση XslTransform.




    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-03-2006, 11:59 10552 σε απάντηση της 10537

    Stick out tongue [:P] Απ: Apo asp se aspx mesw xml ..?

    Akrivws auto pou epsaxna!!!

    Thanks!!

    ----------
    Gia opoion endiaferetai:

    Imports System.Xml.Xsl

    Module Module1

        Sub Main()
            Dim objXsl As XslTransform
            Dim newD As New DataSet
            objXsl = New XslTransform
            objXsl.Load(MapPath("valid.xslt"))
            objXsl.Transform(MapPath("selection.xml"), MapPath("selection1.xml"))

            newD.ReadXml(MapPath("selection1.xml"), XmlReadMode.Auto)

            DataGrid.DataSource = newD
            DataGrid.DataBind()
     End Sub

    End Module
    --------------------

    selection.xml einai to arxiko adiamorfoto xml
    selection1.xml einai afto pou prokyptei meta to Transform
    valid.xslt einai to xslt pou egrapse o pkanavos sthn prwth apanthsh tou.Euxaristw!!

    -------------------

    Smile [:)]


    PROOF by CONTRADICTION
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems