Avatar billede Slettet bruger
31. januar 2008 - 17:05 Der er 43 kommentarer og
1 løsning

XML med C#: Hvordan?

Hej eksperter,

Hvordan bruges XML nemmest i C#? Er der en indbygget parser? Kan I linke til en god tutorial?

Tak!
Avatar billede kalp Novice
31. januar 2008 - 17:08 #1
XmlDocument er en fin klasse til at arbejde med XML in memory hvis ikke det er kæmpe xml filer.. ellers er der også XmlReader..Writer..

XmlDocument er helt fin og du kan navigerer i din xml med Xpath..
http://www.w3schools.com/xpath/

resten må du få svar på af google:)
Avatar billede tjacob Juniormester
31. januar 2008 - 17:12 #2
arne_v har også skrevet en artikel her på sitet: http://www.eksperten.dk/artikler/498
Avatar billede arne_v Ekspert
31. januar 2008 - 17:12 #3
http://www.eksperten.dk/artikler/498 skulle kunne faa dig igang !
Avatar billede arne_v Ekspert
31. januar 2008 - 17:17 #4
For sent.
Avatar billede Slettet bruger
31. januar 2008 - 18:15 #5
Haha!
Tja, jeg tror, jeg kikker lidt på din artikel, arne... Du plejer at være riiimelig inde i sagerne :P
Avatar billede Slettet bruger
31. januar 2008 - 20:54 #6
Hov! Jeg sendte lige en kommentar, der blev slettet... Mystisk.
Nå, her kommer den igen:

Der er lige noget, jeg ikke fårstår, når jeg loader en xml-fil. Jeg har oprettet en fil i mit Visual C# 2008-projekt og forsøget at loade fra samme, men det virker ikke (kan ikke finde filen)?
Avatar billede arne_v Ekspert
31. januar 2008 - 21:21 #7
Mit gaet: filen ligger i et andet dir end der hvor dit program leder efter den. Proev
med fuld sti til filen.
Avatar billede Slettet bruger
31. januar 2008 - 21:23 #8
Hmm... Så skal jeg selv lave filen :/ Pyt, da, gør jeg så.
Avatar billede Slettet bruger
31. januar 2008 - 22:59 #9
Er det muligt at gennemsøge en xml-fil for en bestemt værdi? Altså eksempelvis 'abc' i:

<test>
    <noget>
        abc
    </noget>
    <nogetandet>
        Duh
    </nogetandet>
</test>

Kan man så på en måde finde frem til tagget 'noget'?
Avatar billede arne_v Ekspert
31. januar 2008 - 23:04 #10
Den maa du kunne finde med XPath !
Avatar billede arne_v Ekspert
01. februar 2008 - 01:44 #11
doc.SelectSingleNode("//test/*[contains(text(),'abc')]").Name

vil returnere "abc"
Avatar billede Slettet bruger
01. februar 2008 - 08:20 #12
Men arne, jeg skal jo bruge taggets navn.
Hvad er forresten XPath?
Avatar billede Slettet bruger
01. februar 2008 - 08:58 #13
Hmm, fandt ud af, hvad det er.
Men:
Hvorfor virker følgende ikke:

C:\TEST\Eirene.xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
    <dir>C:\Programmer\Noget</dir>
    <server>
        <title>Test 1</title>
        <v1>Test 1a</v2>
        <v2>Test 1b</v2>
    </server>
    <server>
        <title>Test 2</title>
        <v1>Test 2a</v2>
        <v2>Test 2b</v2>
    </server>
    <server>
        <title>Test 3</title>
        <v1>Test 3a</v2>
        <v2>Test 3b</v2>
    </server>
</root>

//-----
static class Data
{
    public static String Source = "C:\\TEST\\Eirene.xml";
    public static XmlDocument XML = new XmlDocument();
    public static String Directory;
       
    public static XmlDocument Load()
    {
        XML.Load(Source);
        Directory = XML.ChildNodes[1].SelectNodes("dir")[0].Value;
        return XML;
    }

    public static XmlDocument Save()
    {
        XML.Save(Source);
        return XML;
    }
}
//-----

Data.Load().Directory bliver null!
Avatar billede Slettet bruger
01. februar 2008 - 08:59 #14
...hvorfor? Den burde vel blive 'C:\Programmer\Noget'? Det er i hvert fald hensigten.
Avatar billede arne_v Ekspert
01. februar 2008 - 15:21 #15
Min SelectSingleNode returnerer ogsaa taggets navn.
Avatar billede arne_v Ekspert
01. februar 2008 - 15:23 #16
Og jeg forstaar ikke din kode.

SelectNodes finde noder i XML dokumentet - det har intet med dokumentets placering i fil
systemet at goere ?
Avatar billede Slettet bruger
01. februar 2008 - 16:33 #17
> Min SelectSingleNode returnerer ogsaa taggets navn.
Nej, du skrev da, at den returnerede "abc" (som er værdien)?

> SelectNodes finde noder i XML dokumentet - det har intet med dokumentets placering i filsystemet at goere ?
Jeg bruger den heller ikke til at lede i filsystemet... Jeg vælger en fil i starten af koden.
Avatar billede Slettet bruger
01. februar 2008 - 16:34 #18
public static String Source = "C:\\TEST\\Eirene.xml";
og
XML.Load(Source);
er de eneste linier, der har relevant for filsystemet, og de virker.
Avatar billede arne_v Ekspert
01. februar 2008 - 16:46 #19
Jeg skrev forkert.

doc.SelectSingleNode("//test/*[contains(text(),'abc')]").Name returnerer "noget" ikke "abc".
Avatar billede arne_v Ekspert
01. februar 2008 - 16:49 #20
Jeg er stadig noget forvirret over hvad det er du vil med det dir.

Men et gaet ville vaere at:

Directory = XML.ChildNodes[1].SelectNodes("dir")[0].Value;

skal vaere:

Directory = XML.SelectSingleNode("//root/dir").Value;
Avatar billede Slettet bruger
01. februar 2008 - 18:09 #21
Nååå, du bliver forvirret over, at jeg leder efter 'dir' i xml-filen :)
Undskyld, det var et eksempel. Jeg skal nemlig bruge det til et program, der skal lede efter en dir i en xml-fil og derefter læse fra den relevante dir.
Jeg læser lige din kommentar igennem igen...
Avatar billede Slettet bruger
02. februar 2008 - 23:12 #22
Hvad betyder // før root? At det er begyndelsen af en sti?
Avatar billede Slettet bruger
02. februar 2008 - 23:13 #23
(Directory = XML.SelectSingleNode("//root/dir").Value;)
Avatar billede arne_v Ekspert
02. februar 2008 - 23:32 #24
Ja.
Avatar billede Slettet bruger
03. februar 2008 - 02:01 #25
HVAD?!
Jeg har for over to timer siden poster to kommentarer, der nu er forsvundet.
Hvad fanden sker der med Eksperten?!
Avatar billede arne_v Ekspert
03. februar 2008 - 05:23 #26
Du bliver nok nødt til at poste dem igen.
Avatar billede Slettet bruger
03. februar 2008 - 10:16 #27
Ja... Kan bare ikke huske, hvad mit eksempel var. Lige et sekund.
Avatar billede Slettet bruger
03. februar 2008 - 10:22 #28
<?xml en_masse_info_om_xml ?>
<root>
    <example>Det virker vist nu. Græt!</example>
</root>

'XmlDocument.SelectSingleNode("root/example").Value' giver her 'null'. Hvorfor?
Avatar billede arne_v Ekspert
03. februar 2008 - 15:30 #29
Prøv:

ditdoc.SelectSingleNode("//root/example").Value
Avatar billede Slettet bruger
03. februar 2008 - 19:55 #30
Har lige prøvet -- resultatet er stadig: "Cannot set a value on node type 'Element'."
Avatar billede arne_v Ekspert
03. februar 2008 - 19:57 #31
ditdoc.SelectSingleNode("//root/example").FirstChild.Value = "bla bla";

måske.

Ellers prøv og post noget kode.
Avatar billede Slettet bruger
04. februar 2008 - 08:40 #32
Ok.
Avatar billede Slettet bruger
04. februar 2008 - 09:17 #33
ditdoc.SelectSingleNode("//root/example").FirstChild.Value = "bla bla";
virker. Logisk... Elleeer?
Avatar billede arne_v Ekspert
04. februar 2008 - 14:00 #34
.SelectSingleNode("//root/example") giver dig <example>

for at få fat i text noden inden i kan man bruge FirstChild

muligvis virker

ditdoc.SelectSingleNode("//root/example/text()").Value = "bla bla";

også.
Avatar billede Slettet bruger
04. februar 2008 - 14:18 #35
Hm. Det er selvfølgelig logisk - specielt hvis man kan gøre som følger:

<noget>
    Hellooo!
    <nogetandet>Hello, </nogetandet>
    <nogettredje>World!</nogettredje>
</noget>

Kan man det?
Avatar billede arne_v Ekspert
04. februar 2008 - 14:50 #36
Det kan man. Men det anses ikke som værende "pænt".
Avatar billede Slettet bruger
04. februar 2008 - 15:21 #37
Forståeligt og... Forståeligt ;P
Hvad med brug af atributter?

<noget nogetandet="h4x0r">
    <nogettredje>zomg</nogettredje>
</noget>

Til hvad bruger man det, hvis det skal være "pænt"?
Jeg ville umiddelbart sige, at man kun skulle bruge den som erstatning af

<noget>
    Hellooo!
    <nogetandet>Hello, </nogetandet>
    <nogettredje>World!</nogettredje>
</noget>

, der jeg ikke er pænt :)
Avatar billede Slettet bruger
04. februar 2008 - 15:21 #38
*der JO ikke
Avatar billede Slettet bruger
04. februar 2008 - 15:22 #39
Altså:

<noget nogetandet="h4x0r">
    <nogettredje>zomg</nogettredje>
</noget>

I stedet for:

<noget>
    h4x0r
    <nogettredje>zomg</nogettredje>
</noget>

Er det nogenlunde sådan?
Avatar billede Slettet bruger
04. februar 2008 - 15:23 #40
Et skud i tågen... Kan komme på mange andre ting, man også kan gøre enklere med attributes.
Avatar billede arne_v Ekspert
04. februar 2008 - 16:10 #41
f.eks.
Avatar billede Slettet bruger
04. februar 2008 - 17:10 #42
Ok. Så må det vist også være på tide, at du får nogle points! Gief svar!
Avatar billede arne_v Ekspert
04. februar 2008 - 20:45 #43
svar
Avatar billede Slettet bruger
04. februar 2008 - 20:52 #44
points
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