Avatar billede fuxi Nybegynder
16. august 2005 - 09:35 Der er 12 kommentarer og
1 løsning

Sql i xml

Er der en måde at jeg kan bruge SQL til at hente elementer ud fra et XML dokument.

Jeg har prøvet WilsonXmlDbClient - den virker sådan set fint, men jeg kan ikke få den til at lave statements som f.eks. "SELECT MAX(forumID) FROM forum" eller "SELECT * FROM forum ORDER BY forumID DESC"
Spørgsmålet er lidt er der alternativer til WilsonXmlDbClient eller hvad pokker gør man... Jeg skal hente det fra et XML dokument, da det er eksterne data, og jeg har ikke lyst til at smide dem igennem en Database først.

Jeg håber at der er en der kan hjælpe.!
Avatar billede fuxi Nybegynder
16. august 2005 - 10:02 #1
Glemte lige mit XML dokument:
<?xml version="1.0" encoding="utf-8"?><forums>
<forum><forumID>5</forumID><homepageID>1</homepageID><title>Dette er en test 1</title><teaser /><imageID>0</imageID><mainCategoryID>222</mainCategoryID><categoryID>111</categoryID><moderators>999</moderators><threadCnt>222</threadCnt><threadRepliesCnt>200</threadRepliesCnt><addedDateTime>15-08-2005 13:52:26</addedDateTime><lastThreadDateTime>15-08-2005 13:52:26</lastThreadDateTime><lastThreadReplyDateTime>15-08-2005 13:52:26</lastThreadReplyDateTime></forum>
<forum><forumID>1</forumID><homepageID>2</homepageID><title>Dette er en test 2</title><teaser /><imageID>210</imageID><mainCategoryID>222</mainCategoryID><categoryID>111</categoryID><moderators>999</moderators><threadCnt>222</threadCnt><threadRepliesCnt>200</threadRepliesCnt><addedDateTime>15-08-2005 13:52:26</addedDateTime><lastThreadDateTime>15-08-2005 13:52:26</lastThreadDateTime><lastThreadReplyDateTime>15-08-2005 13:52:26</lastThreadReplyDateTime></forum>
<forum><forumID>2</forumID><homepageID>2</homepageID><title>Dette er en test 3</title><teaser /><imageID>210</imageID><mainCategoryID>222</mainCategoryID><categoryID>111</categoryID><moderators>999</moderators><threadCnt>222</threadCnt><threadRepliesCnt>200</threadRepliesCnt><addedDateTime>15-08-2005 13:52:26</addedDateTime><lastThreadDateTime>15-08-2005 13:52:26</lastThreadDateTime><lastThreadReplyDateTime>15-08-2005 13:52:26</lastThreadReplyDateTime></forum>
</forums>
Avatar billede fuxi Nybegynder
16. august 2005 - 10:03 #2
Hmm ser lidt underligt ud...
<forums>
  <forum>
    <forumID>5</forumID>
    <title>Dette er en test</title>
    <teaser></teaser>
    ...
  </forum>
</forums>
Avatar billede arne_v Ekspert
16. august 2005 - 11:58 #3
Hvad med at droppe SQL og læse ind i et XmlDocument, lave en SelectNodes med
et XPATH udtryk og selv regne ?
Avatar billede fuxi Nybegynder
16. august 2005 - 12:31 #4
Det er muligt at det er nødvendigt at bruge XPath...
Jeg kender ikke rigtig så meget til XPath, men umiddelbart vil det give en række ulemper, idet at det vil være nødvendigt at lave en række ekstra funktioner. F.eks. til beregning af MAX(ForumID), ORDER BY forumID DESC, MIN(ForumID) og sikkert også andre ting. Problemet er at jeg helt sikkert for behov for at trække en del forskellige data ud, F.eks. vil der være relationer i en forum.xml fil til en xml fil der f.eks. hedder thread.xml etc. så spørgsmålet er nok om det er muligt på en eller anden måde at få de samme ting ud af XML som ved SQL i en Database.

Idet jeg ikke er super hård til ASP.NET + C# endnu er der sikkert en del jeg overser. Er det f.eks. muligt at lave sql udtræk fra et DataSet? Hvis det er mulig vil jeg jo blot kunnne konvertere min XML til DataSet og derfra lave et udtræk.

Jeg håber at der er nogen der kan hjælpe
Avatar billede arne_v Ekspert
16. august 2005 - 12:36 #5
et DataSet består af en eller flere DataTable og en DataTable har en Compute metode
som kan lave beregninger og filtrere
Avatar billede fuxi Nybegynder
16. august 2005 - 13:19 #6
ok som sagt er jeg ikke så meget inde i .NET endnu.
Det vil sige at jeg f.eks. har mit DataSet der består af min XML fil.

DataSet ds = new DataSet();
ds.ReadXml("c:\\inetpub\\wwwroot\\Forum\\forum.xml");
ds.Tables[0].Compute(???,???);

Hvad vil der skulle stå i min Compute for at jeg f.eks. vil kunne slå Max(ForumID) op ?
Avatar billede arne_v Ekspert
16. august 2005 - 13:21 #7
Jeg prøver lige at bixe et eksempel.
Avatar billede arne_v Ekspert
16. august 2005 - 13:40 #8
<all>
  <one>
    <name>xxx</name>
    <value>111</value>
  </one>
  <one>
    <name>yy</name>
    <value>22</value>
  </one>
</all>
Avatar billede arne_v Ekspert
16. august 2005 - 13:41 #9
<?xml version="1.0"?>
<xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="all">
        <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="one">
                    <xsd:complexType>
                        <xsd:attribute name="name" type="xsd:string"/>
                        <xsd:attribute name="value" type="xsd:integer"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
Avatar billede arne_v Ekspert
16. august 2005 - 13:41 #10
using System;
using System.Data;

namespace E
{
    public class MainClass
    {
        public static void Main(string[] args)
        {
            DataSet ds = new DataSet();
            ds.ReadXmlSchema(@"C:\ds.xsd");
            ds.ReadXml(@"C:\ds.xml");
            int count = (int)ds.Tables[0].Compute("COUNT(value)","");
            long sum = (long)ds.Tables[0].Compute("SUM(value)","");
            long avg = (long)ds.Tables[0].Compute("AVG(value)","");
            Console.WriteLine(count + " " + sum + " "+ avg);
        }
    }
}
Avatar billede fuxi Nybegynder
16. august 2005 - 15:26 #11
Takker mange gange, det er lige hvad jeg har brug for :O) Smider du lige et svar så skal du få point!
Avatar billede arne_v Ekspert
16. august 2005 - 15:30 #12
kommer her
Avatar billede arne_v Ekspert
16. august 2005 - 15:31 #13
Schema'et er nødvendigt for at få tal felter gjordt til tal så man kan ABG og SUM på dem.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB