Kom ihåg mig?
Home Menu

Menu


Xml to Linq

Ämnesverktyg Visningsalternativ
Oläst 2009-02-27, 15:14 #1
peterbf peterbf är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2008
Inlägg: 48
peterbf peterbf är inte uppkopplad
Nykomling
 
Reg.datum: Sep 2008
Inlägg: 48
Zupp fellas.

Min kund har följande Xml-dokument (mycket mycket större, visar endast behövlig mängd):
Kod:
<root>
 <y2009>
 <m2>
 <t>
 <d>25</d>
 <v1>269,27</v1>
 <v2>231,57</v2>
 <v3>226,63</v3>
 </t>
 <t>
 <d>26</d>
 <v1>267,38</v1>
 <v2>232,50</v2>
 <v3>231,57</v3>
 </t>
 </m2>
<y2009>
Jag vet att filen har väldigt dålig struktur, och man hade kunnat göra allt mycket enklare. Men nu är det som det är och kunden tillåter inga ändringar i strukturen (tydligen en massa flash-filer som hämtar data från denna fil).

<y2009> = Året då "posten" läggs till.
<m2> = Månaden då "posten" läggs till, m2 = februari.
<t> = Ingen aning, antagligen nån sorts wrapper.
<d> = Dagen då "posten" läggs till.
<v1>, <v2>, <v3> = Värden för dagen då "posten" läggs till.

Det kunden vill kunna göra är att via ett formulär, lägga till fler värden vid dagens datum. Värdena måste komma i följd, finns endast ett värde vid en dag, d.v.s. <v1>, så ska den skapa <v2> and so forth.

Jag har inte kommit långt själv. Jag har lyckats penetrera dokumentet och hamnat inne i rätt månad (<mx>). Men då kommer ju en massa <t>, det jag måste göra är att på nåt sätt iterera genom dessa för att hitta dagens datum inne i <d>, och därefter, på nåt sätt, kolla hur många värden det finns; och lägga till värdet man postar i formuläret i rätt ordning.

Ni har antagligen följdfrågor, så skicka de till mig i ett kuvert så uppdaterar jag huvudtråden därefter ;-)

My present code:
Kod:
    XDocument document = XDocument.Load(Server.MapPath("~/termPrice.xml"));

    String todaysYear = "y" + DateTime.Now.Year.ToString();
    String todaysMonth = "m" + DateTime.Now.Month.ToString();
    var todaysDay = DateTime.Now.ToString("dd");

    var items = from doc in document.Descendants(todaysYear)
          let month = (string)doc.Element(todaysMonth)
          // Här uppstår ju <t>-elementet.
          where doc.Element("d").Value == todaysDay
          select doc;

    foreach (XElement element in items) {
      Response.Write(element.ToString());
    }
Have a nice weekend!
peterbf är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-02-27, 18:03 #2
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by peterbf@Feb 27 2009, 15:14
Jag har inte kommit långt själv. Jag har lyckats penetrera dokumentet och hamnat inne i rätt månad (<mx>). Men då kommer ju en massa <t>, det jag måste göra är att på nåt sätt iterera genom dessa för att hitta dagens datum inne i <d>, och därefter, på nåt sätt, kolla hur många värden det finns; och lägga till värdet man postar i formuläret i rätt ordning.
Använd Xpath för att hitta fram. Behöver du vet hur många element som finns så använder du Xpath även för detta.

Lägg till med insertBefore() eller appendChild().

(Sök på DOM och Xpath.)
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-03, 10:37 #3
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
peterbf; du har helt rätt, det är knas i tänket runt xmlstrukturen. Döpa taggarna efter det värde de har (årtal)? Hmmm....
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-03, 11:42 #4
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by Robert@Mar 3 2009, 10:37
peterbf; du har helt rätt, det är knas i tänket runt xmlstrukturen. Döpa taggarna efter det värde de har (årtal)? Hmmm....
Jo, det är klart. Istället borde exempelvis attribut användas:
Kod:
<t year="2009" month="2">
Men att navigera i dokumentet går väl ändå bra med Xpath.
martine är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 19:03.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017