2009-05-29 11 views
0

Je rencontre un problème lors de l'utilisation de littéraux XML avec StringBuilder dans VB 2008. Si j'utilise ce code, tout va bien.Problème avec StringBuilder et les littéraux XML

Dim html As New System.Text.StringBuilder 

html.Append(<html><body></body></html>) 

MsgBox("hello") 

Maintenant le problème est que je veux emballer le HTML autour de quelque chose qui est généré dans le code. Lorsque le code HTML n'a pas la balise de fin correspondante, il agit comme s'il allait au-delà de la) et continue de le chercher.

Y at-il quelque chose que je fais mal ici?

Répondre

1

Parce que vous n'êtes pas la formation d'un XML approprié dans votre XML déclaration littérales (dans votre cas, vous ne fermez pas vos tags), vous ne pouvez pas utiliser XML Littéraux ici. Vous devez soit avoir vos littéraux XML soit le bon XML, ou bien convertir votre code pour les utiliser comme des chaînes. Ainsi:

html.Append("<html><body>") 

msgbox("nothing happens") 
1

L'intuition évidente serait que les littéraux XML requièrent du XML bien formé. Si vous voulez envelopper les choses, laissez tomber dans une expression intégrée comme dans ...

html.Append(<html><body><%= contentExp %></body></html>) 
2

Je ne l'ai jamais utilisé les littéraux XML de VB, mais je l'ai construit beaucoup de XML. J'aime utiliser les StringWriter/classes XmlTextWriter:

StringBuilder sb = new StringBuilder(); 
using (StringWriter sw = new StringWriter(sb)) 
{ 
    XmlTextWriter xw = new XmlTextWriter(sw); 
    xw.WriteStartElement("html"); 
    xw.WriteStartElement("body"); 
    xw.WriteRaw(contentExp); 
    ... 
    wr.WriteEndElement(); // body 
    wr.WriteEndElement(); // html 
} 
// do something with sb.ToString()? 
1

Pas une réponse, mais question à vous. Quelle serait la valeur de l'utilisation de XML Literals avec le générateur de chaînes. Il me semble que cela va à contre-courant. Créez votre XML en utilisant des littéraux, puis obtenez simplement sa représentation sous forme de chaîne en utilisant l'appel de la méthode .ToString() si vous avez besoin d'une chaîne.

Questions connexes