[C#/XML] <parent>a<node>b</node>c</parent> : Hoe?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
Hallo, ik krijg de volgende XML aangeleverd:

XML:
1
2
3
4
5
6
7
<listitem>
Lorem
<bold>ipsum</bold>
dolor
<italics>sil</italics>
amet
</listitem>

Nu wil ik het volgende:

Lorem selecteren,
vervolgens de "bold" node, daar de text van selecteren of eventuele childnodes.
Daarna dolor selecteren, daarna eventueel volgende childnodes, etc.
Kan dit? Of heb ik dan perse een opmaak nodig als:

XML:
1
2
3
4
5
6
7
<listitem>
<content>Lorem</content>
<bold>ipsum</bold>
<content>dolor</content>
<italics>sit</italics>
<content>amet</content>
</listitem>


Het lukt me wel alle text op te halen van een node, zonder dus de inhoud van de children d.m.v. een extention method:

C#:
1
2
3
4
5
6
7
8
9
public static string GetText(this XElement element)
        {
            if (!element.HasElements)
                return element.Value;
            var sb = new StringBuilder();
            foreach (var xNode in element.Nodes().OfType<XText>())
                sb.Append(xNode.ToString());
            return sb.ToString();
        }


Eigelijk wil ik dus gewoon door een element for-eachen, maar ik heb dus geen nodes, maar platte text er in plus children, dus een output van zoiets:

"lorem"
XElement ("ipsum")
"dolor"
XElement ("sit")
"amet"

[ Voor 3% gewijzigd door Wijnbo op 01-03-2010 10:57 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Je weet dat platte text in een node ook gewoon een childnode is van diezelfde node? Als je dus door alle childs van een node heen gaat loopen dan zitten daar ook die stukken platte tekst in, als text nodes.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
Creepy schreef op maandag 01 maart 2010 @ 11:04:
Je weet dat platte text in een node ook gewoon een childnode is van diezelfde node? Als je dus door alle childs van een node heen gaat loopen dan zitten daar ook die stukken platte tekst in, als text nodes.
d'oh. Ik zie het nu pas, die Extention method was een copy paste uit een VB projectje. Zie inderdaad dat je een XText node kunt selecteren. Thx :/

Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
Dat was dus inderdaad de oplossing, foreachen door de nodes, en indien node type een XElement is, casten naar XElement, en dan weer door nodes foreachen Easy!

Bedankt!