[C# > VB.NET] GetAttribute bij docx/xml

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Moi_in_actie
  • Registratie: Maart 2007
  • Laatst online: 19-09 15:32
Ik ben met een stukje code bezig om files uit te lezen. Gewone .txt of .doc files gaan heel eenvoudig, maar bij een docx wordt het een groter probleem. Mijn voornaamste hindernis is dat dit gebruikt gaat worden bij een ASP.NET pagina die draait op een server waar geen Office 2007 op geïnstalleerd is. Dus moet ik .docx files via een omweg uitlezen.
Nu had ik een mooi voorbeeld gevonden van een desktop applicatie die deels hetzelfde deed als wat ik nodig had. Echter, dit programma is geschreven in C#. Nu is C# geen probleem voor mij, aangezien het mijn standaard programmeertaal is op mijn opleiding. Wat wel een probleem vormt, is het overzetten naar VB.NET. Vele delen kan je bijna 1 op 1 omzetten, maar nu ben ik blijven haken op het volgende deel:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private string ReadNode(XmlNode node)
        {
            if (node == null || node.NodeType != XmlNodeType.Element)
                return string.Empty;

            StringBuilder sb = new StringBuilder();
            foreach (XmlNode child in node.ChildNodes)
            {
                if (child.NodeType != XmlNodeType.Element) continue;

                switch (child.LocalName)
                {
                    case "t":                           // Text
                        sb.Append(child.InnerText.TrimEnd());
                        
             ----->    string space = ((XmlElement)child).GetAttribute("xml:space");
                        if (!string.IsNullOrEmpty(space) && space == "preserve")
                            sb.Append(' ');


Dit is de C# code. Het overzetten gaat fout daar waar ik een pijl heb gezet, bij ((XmlElement)child).GetAttribute("xml:space"). Het is mijn eerste keer dat ik uitgebreid werk met het uitlezen/bewerken van XML, dus ik ben er al niet zo'n held in.

Nu is mijn vraag: wat is hiervan de juiste omzetting naar VB.NET? Ik heb al vele dingen geprobeerd, maar OF ik kan de optie "GetAttribute" niet gebruiken, of bij het debuggen in Visual Studio 2008 loopt hij vast met verschillende errors.

Bvd.

Ryzen 9 9950X3D ~~ 32GB GSkill TridentZ 6000Mhz ~~ ASRock B850M Steel Legend ~~ Powercolor Hellhound RX9070XT


Acties:
  • 0 Henk 'm!

  • glmona
  • Registratie: Maart 2005
  • Laatst online: 15-08 06:22
C#:
1
string space = ((XmlElement)child).GetAttribute("xml:space");

wordt dit niet:
Visual Basic .NET:
1
2
dim space as string
child.GetAttribute("xml:space").toString()

[ Voor 3% gewijzigd door glmona op 01-07-2009 16:19 ]


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 13:23
Het VB.Net equivalent is volgens mij CType(object, type).

[ Voor 20% gewijzigd door creator1988 op 01-07-2009 16:30 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
In de regel die je aanhaalt word er naar een XmlElement gecast ( Want child is een XmlNode ). Je zult dus in VB.NET ook moeten casten.

In VB.NET kun je met CType DirectCast casten.

edit:

CType converteert blijkbaar, maar je wilt echt casten dus dan dien je DirectCast te gebruiken als ik google mag geloven ;)

[ Voor 31% gewijzigd door Woy op 01-07-2009 16:32 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • glmona
  • Registratie: Maart 2005
  • Laatst online: 15-08 06:22
wat is er mis met tostring?

Acties:
  • 0 Henk 'm!

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 18-09 13:37

sopsop

[v] [;,,;] [v]

Wellicht ook handig voor anderen: http://www.developerfusion.com/tools/convert/csharp-to-vb/

Die levert dit op:
Visual Basic .NET:
1
Dim space As String = DirectCast(child, XmlElement).GetAttribute("xml:space")


Ik heb er vrij veel aan gehad toen ik nog niet heel erg bedreven was in c# en wel de c# voorbeeldjes wilde gebruiken. Hij is niet altijd even nauwkeurig, maar dat merk je snel genoeg.

[ Voor 30% gewijzigd door sopsop op 01-07-2009 16:43 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
GetAttribute returnt al een string ( http://msdn.microsoft.com/en-us/library/acwfyhc7.aspx ) dus het is nogal overbodig.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • glmona
  • Registratie: Maart 2005
  • Laatst online: 15-08 06:22
Waar is dan de DirectCast voor nodig, het is toch al een xmlnode object? Die heeft toch ook een getattribute methode?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
glmona schreef op woensdag 01 juli 2009 @ 16:46:
Waar is dan de DirectCast voor nodig, het is toch al een xmlnode object? Die heeft toch ook een getattribute methode?
Nee. http://msdn.microsoft.com....xml.xmlnode_methods.aspx

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 13:23
En .ToString() is evil

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 13:23
Je geeft niet expliciet aan wat je wilt. ToString doet zo vaak zo iets anders in verschillende assemblies.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:50

gorgi_19

Kruimeltjes zijn weer op :9

creator1988 schreef op woensdag 01 juli 2009 @ 17:08:
Je geeft niet expliciet aan wat je wilt. ToString doet zo vaak zo iets anders in verschillende assemblies.
:? Dat hangt er maar helemaal vanaf wat het achterliggende object is.

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1