none
Bestehende XML Datei auslesen/parsen - Ansätze RRS feed

  • Frage

  • Hallo,

    ich muss eine XML Datei auslesen.

      <Data>
        <RefDef> Marke3 </RefDef>
        <Text> DB0815 </Text>
        <X-Koord> -274,05 </X-Koord>
        <Y-Koord> 108,28 </Y-Koord>
        <Angle> 0 </Angle>
        <Layer> 4 </Layer>
        <Contour> 
          <item> -653.550; +115.880; </item>
          <item> -648.350; +115.880; </item>
          <item> -648.350; +110.680; </item>
          <item> -653.550; +110.680; </item>
          <item> -653.550; +115.880; </item>
        </Contour>
    	
    	<Contour2> 
    	  <item value="03.02.13" field="PRODDATUM" name="prodDate" />
    	  <item value="03.02.13" field="PRODDATUM" name="prodDate" />
    	  <item value="03.02.13" field="PRODDATUM" name="prodDate" />
         </Contour2>
      </Data>
      <Data>

    Import über den xsd Editor - klar. 

      Wie komme ich nun idealerweise an die items? 

      help += drItem.item_Text; 

      Wie teile ich den String auf? Split?

      -653.550; +115.880; 

      Prinzipiell geht es, denke jedoch, dass es da evtl. elegantere Lösungen gibt.

      Kurzum, welche Technik empfiehlt sich...? 

      Danke und Grüße Andy.

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

    test 7

    foreach (DMYX.DataRow dR in ImportPanel.Data)
                {
                    help += string.Format("PosX = {0}, PosY = {1}, Name = {2:0000000}, RefDes = {3}\r\n", Convert.ToDouble(dR._X_Koord),
                                                                                             Convert.ToDouble(dR._Y_Koord),
                                                                                             dR.Text.PadLeft(10, ' '),
                                                                                             dR.RefDes.PadLeft(10, ' '));
    
                    foreach (DMYX.ContourRow drContour in ImportPanel.Contour)
                    {
                            if ( drContour.Data_Id == dR.Data_Id )
                            {
                                foreach (DMYX.itemRow drItem in ImportPanel.item)
                                {
                                    if (drItem.Contour_Id == drContour.Data_Id)
                                    {
                                        help += drItem.item_Text;
                                    }
    
                                }
                            }
                    }
    
                    z++;
    
    
                }

    Mittwoch, 20. Februar 2013 18:46

Alle Antworten

  • Ich bevorzuge den Klassenansatz. D.h. mit xsd.exe /c die Klassen aus dem Schema für diese XML-Dateien erzeugen und mit normaler Deserialisierung laden.
    Mittwoch, 20. Februar 2013 19:04
  • Ich bevorzuge den Klassenansatz. D.h. mit xsd.exe /c die Klassen aus dem Schema für diese XML-Dateien erzeugen und mit normaler Deserialisierung laden.

    Hallo Stefan,

    ok, wie würde das dann konkret aussehen?

    Bin da schon offen. Wie lese ich die Datei dann ein? Wie greife ich geschickt darauf zu?

    Optimal wäre der Vergleich.

     
    foreach (DMYX.ContourRow drContour in ImportPanel.Contour)
    {
      if ( drContour.Data_Id == dR.Data_Id )
      {
       foreach (DMYX.itemRow drItem in ImportPanel.item)
       {
        if (drItem.Contour_Id == drContour.Data_Id)
        {
         help += drItem.item_Text;
        }
    
       }
      }
    }
    

    Ist gefühlt etwas umständlich, ja. Problem, wie macht man es besser......?

    Grüße Andy


    • Bearbeitet Andy Bauer Mittwoch, 20. Februar 2013 21:46 Format
    Mittwoch, 20. Februar 2013 21:45
  • Hallo Stefan,
    http://www.codeproject.com/Articles/12886/Simplifying-Serialization-and-De-serialization-Pro

    ok ich denke das ist Geschmackssache.
    Gefühlt ist das über in Dataset einfacher.
    Was gängiger ist, weiß ich nicht.

    Ich kann über ein Dataset sehr gut zugreifen.
    Müsste man das untere, evtl. über LinQ machen.
    Primär-/Fremdschlüssel kommen ja dort ins Spiel.

    Wobei das bei mir das gleiche macht

     xsd.exe /c  oder nur xsd.exe  Die XSD sieht gleich aus.

    Grüße Andy

    P.S. Nichts desto trotz müsse ich so was dann mit LinQ machen?

    foreach (DMYX.ContourRow drContour in ImportPanel.Contour)
    {
      if ( drContour.Data_Id == dR.Data_Id )
      {
       foreach (DMYX.itemRow drItem in ImportPanel.item)
       {
        if (drItem.Contour_Id == drContour.Data_Id)
        {
         help += drItem.item_Text;
        }
    
       }
      }
    }
    

    Freitag, 22. Februar 2013 18:57