Avatar billede cr2000 Nybegynder
24. juni 2004 - 11:42 Der er 25 kommentarer og
1 løsning

XML i asp.net

Hej Eksperter.

Jeg håber der er en som kan hjælpe mig her.

Jeg har nu prøvet på tre forskellige måder at hente noget ud af en xml fil men uden held. Har prøvet almindeligt ASP, Javascript og nu ASP.NET

Mit problem ligger i nu at DataSet giver følgene fejl:
System.ArgumentException: The same table (GENERAL_TEXT_REALESTATE) cannot be the child table in two nested relations.

Hvad gør jeg for at komme videre? Jeg kan ikke ændre på XML dokumentet som ser ud som dette:
http://www1.finn.no/jsp/xmlexport.jsp?partnerid=kobb&dtd=FINNIF-estateforsale32.dtd

What to do?

Mvh Christian
Avatar billede nielsbrinch Nybegynder
24. juni 2004 - 14:33 #1
Du kan benytte XmlDocument, XmlNode og den serie af klasser til det. Det har jeg haft held med.
Avatar billede cr2000 Nybegynder
24. juni 2004 - 14:38 #2
Du kunne vel ikke smide et lille eksempel der f.eks henter alle ORDERNO fra det link jeg skrev?
Avatar billede nielsbrinch Nybegynder
24. juni 2004 - 16:40 #3
Når du har din root-node der indeholder <FINN.IF.ESTATE.FORSALE> og alt indhold kan du gøre noget i retningen af:

ArrayList orderNoList = new ArrayList();
foreach (XmlNode nodeObject in root)
{
  if (nodeObject.Name.Equals("OBJECT"))
  {
    foreach (XmlNode nodeSub in nodeObject)
    {
      if (nodeSub.Name.Equals("OBJECT_HEAD"))
      {
        foreach (XmlNode nodeData in nodeSub)
        {
          if (nodeData.Name.Equals("ORDERNO"))
          {
            orderNoList.Add(nodeData.InnerText);
          }
        }
      }
    }
  }
}

Ikke kompileret - jeg har skrevet det direkte her i Ekspertens textarea.
Avatar billede nielsbrinch Nybegynder
24. juni 2004 - 16:41 #4
For at få root kan du vist bare tage hele din doc og udtrække FirstChild.
Avatar billede cr2000 Nybegynder
24. juni 2004 - 16:46 #5
Hvordan starter jeg de der dokumenter op og henter indholdet fra linket?
Avatar billede nielsbrinch Nybegynder
24. juni 2004 - 16:50 #6
På XmlDocument er der noget i retningen af LoadXml eller sådan noget.
Avatar billede cr2000 Nybegynder
24. juni 2004 - 16:54 #7
Ok.

Jeg har ikke den vilde forstand på ASP.NET så jeg er lidt på dybt vand.
Har du mulighed for på et tidspunkt at lave et eksempel på overstående der kan kører?
Så ville du gøre mig til at glad mand :)
Avatar billede nielsbrinch Nybegynder
24. juni 2004 - 17:02 #8
Desværre.

Jeg synes jeg har givet dig eksempler nok til at du selv kan kravle det sidste stykke. Hvorfor starter du ikke med at prøve at gøre det jeg fortæller dig og så spørger hvis du har nogle specifikke problemer.
Avatar billede nielsbrinch Nybegynder
24. juni 2004 - 17:39 #9
XmlDocument doc = new XmlDocument();
doc.Load(@"http://www1.finn.no/jsp/xmlexport.jsp?partnerid=kobb&dtd=FINNIF-estateforsale32.dtd");
XmlNode root = doc.FirstChild;
Avatar billede nielsbrinch Nybegynder
24. juni 2004 - 17:42 #10
Der er i øvrigt langt bedre måder at gøre det på rent performance-mæssigt, jeg tror bare det her lige umiddelbart er den nemmeste måde at komme igang på.
Avatar billede cr2000 Nybegynder
25. juni 2004 - 09:20 #11
OK... Tak for hjælpen. :)

Jeg prøver mig frem :)

Du må lige smide et svar...
Avatar billede cr2000 Nybegynder
25. juni 2004 - 11:45 #12
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Xml" %>
<%@ Page Language="C#" Debug="true" %>
<%

XmlDocument doc = new XmlDocument();
doc.Load(@"http://www1.finn.no/jsp/xmlexport.jsp?partnerid=kobb&dtd=FINNIF-estateforsale32.dtd");
XmlNode root = doc.FirstChild;


ArrayList orderNoList = new ArrayList();
foreach (XmlNode nodeObject in root)
{
  if (nodeObject.Name.Equals("OBJECT"))
  {
    foreach (XmlNode nodeSub in nodeObject)
    {
      if (nodeSub.Name.Equals("OBJECT_HEAD"))
      {
        foreach (XmlNode nodeData in nodeSub)
        {
          if (nodeData.Name.Equals("ORDERNO"))
          {
            orderNoList.Add(nodeData.InnerText);
          }
        }
      }
    }
  }
}
%>


Hvordan får jeg så skrevet resultatet ud?
Avatar billede cr2000 Nybegynder
25. juni 2004 - 13:41 #13
Her prøvet med :

foreach (object i in orderNoList)
{
Response.Write( i );
}

Men det giver intet output...
Måske der ikke er noget i den Array?
Avatar billede nielsbrinch Nybegynder
25. juni 2004 - 15:17 #14
Måske, det kan du tjekke med orderNoList.Count.
Avatar billede cr2000 Nybegynder
25. juni 2004 - 15:23 #15
Den siger 0... What to do?
Avatar billede nielsbrinch Nybegynder
25. juni 2004 - 15:28 #16
Tjah, der er noget galt med den måde XML'en gennemløbes på. Du må jo gå igang med at debugge lidt ...

Der er ikke nogen vej uden om - du bliver nødt til at forstå hvad det er der sker når du gennemløber XML'en, hvis du vil have det til at virke.

Her er en komplet oversigt over alle klasser og metoder i hele .NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/cpref_start.asp
Avatar billede cr2000 Nybegynder
25. juni 2004 - 15:42 #17
Da jeg startede med at lave det her i almindeligt ASP havde jeg problemer med at XMLDOM ikke kunne finde ud af det når linje to i XML dokumentet var der.

<!DOCTYPE FINN.IF.ESTATE.FORSALE SYSTEM  "http://www.finn.no/dtd/FINNIF-estateforsale321.dtd">

Det er forhåbenligt ikke det som også gør at der ikke kommer noget ud i .NET vel?
Det var sådan set grunden til at jeg ville forsøge mig i .NET
Avatar billede nielsbrinch Nybegynder
25. juni 2004 - 18:52 #18
Jo det er det faktisk. Hvis du prøver at udskrive OuterXML på root er det sikkert den linje du får. Prøv at gøre root til root.NextSibling el. lign.
Avatar billede cr2000 Nybegynder
28. juni 2004 - 10:27 #19
Når jeg prøvet at udskrive OuterXML siger den at:
"'System.Xml.XmlNode' does not contain a definition for 'OuterXML'"

Når jeg prøver NextSibling istedet for FirstChild siger den:
"System.NullReferenceException: Object reference not set to an instance of an object."
I Foreach linjen.

Hvis jeg prøver NextSibling efter FirstChild ender jeg igen op med en tom side.
F.eks
XmlNode root = doc.FirstChild;
root = root.NextSibling;

Hvad gør jeg galt?
Avatar billede powernodes Nybegynder
28. juni 2004 - 11:07 #20
Prøv
XmlNode root = doc.FirstChild.FirstChild;
Avatar billede cr2000 Nybegynder
28. juni 2004 - 11:46 #21
Får igen den:
"System.NullReferenceException: Object reference not set to an instance of an object."
Avatar billede nielsbrinch Nybegynder
28. juni 2004 - 17:57 #22
Jeg har lige testet lidt. Med denne kode har root det rigtige indhold:

XmlDocument doc = new XmlDocument();
doc.Load(@"http://www1.finn.no/jsp/xmlexport.jsp?partnerid=kobb&dtd=FINNIF-estateforsale32.dtd");
XmlNode root = doc.FirstChild;
root = root.NextSibling;
root = root.NextSibling;
Avatar billede nielsbrinch Nybegynder
28. juni 2004 - 17:58 #23
Du kan hele tiden køre OuterXml på en XmlNode (f.eks. root) for at se hvad du har fat i lige nu. OuterXml på root med ovenstående eksempel er HELE den store XML-fil. (bortset fra de to allerførste linjer)
Avatar billede cr2000 Nybegynder
28. juni 2004 - 18:46 #24
weee :) Prøver det lige imorgen når jeg er på arbejde.
Avatar billede cr2000 Nybegynder
02. juli 2004 - 13:36 #25
Det virker :) Skønt !!

Hurtigt spørgsmål.
Hvordan for jeg hentet en værdi ud som står inde for < og > ???

F.eks værdien Ref i MO
http://www1.finn.no/jsp/xmlexport.jsp?partnerid=finst&ordernumber=4336261&dtd=FINNIF-mmo13.dtd&xmltype=MMO
Avatar billede nielsbrinch Nybegynder
02. juli 2004 - 14:25 #26
Din XmlNode node = <tagnavn attribut="værdi">

Så henter du sådan:

node.Name = tagnavn
node.Attributes["attribut"].Value = værdi
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