2009-01-20 6 views
6

J'utilise l'espace de noms System.Xml.Linq (.NET 3.5 SP1) pour remplir un document de modèle html avec des balises de données div (puis l'enregistrer sur le disque). Parfois, les balises div sont vides et cela semble être un problème quand il s'agit de HTML. Selon mes recherches, l'étiquette DIV n'est pas auto-fermante. Par conséquent, sous Firefox au moins, un <div /> est considéré comme une balise div d'ouverture sans balise de fermeture correspondante.Balises de fermeture d'élément explicite avec l'espace de noms System.Xml.Linq

Alors, quand je crée de nouveaux éléments div en déclarant:

XElement divTag = new XElement("div"); 

Comment puis-je forcer le XML généré, à <div></div> au lieu de <div />?

Répondre

5

Je ne sais pas pourquoi vous finiriez avec un vide DIV (semble un peu inutile!) Mais:

divTag.SetValue(string.Empty); 

devrait le faire.

+0

Yah, c'est un peu inutile. J'étais juste paresseux et je ne voulais pas écrire un tas d'if-checks pour déterminer si je devais écrire ces balises ou non au document sous-jacent. –

1

Je ne connais pas la réponse à votre question en utilisant LINQ. Mais il existe un projet appelé HTML Agility Pack sur codeplex qui vous permet de créer et de manipuler des documents HTML de la même manière que nous pouvons manipuler un document XML en utilisant les classes d'espaces de noms System.Xml.

2

Avec XElement divTag = new XElement ("div", String.Empty); vous obtenez l'étiquette de fermeture explicite

0

Je l'ai fait. Travailler comme prévu

myXml = new XElement("script", new XAttribute("src", "value")); 
myXml .Value = ""; 

Ce qui donne ci-dessous comme résultat.

<script src = "value"></script> 
Questions connexes