/ / Création du contenu «text <tag /> text <tag />» dans une balise d'un fichier XDocument via LINQ to XML - c #, html, xml, réflexion, linq-to-xml

Création de contenu «text <tag /> text <tag />» dans une balise d'un fichier XDocument via LINQ to XML - c #, html, xml, réflexion, linq-to-xml

J'utilise le XDocument class et LINQ to XML pour créer une sortie HTML simple, et je suis tombé sur un problème que je n'arrive pas à "sembler résoudre. Il n’est peut-être même pas possible de le faire avec XML.

J'ai un POCO avec beaucoup de propriétés, et certaines d'entre elles sont nommées par conventions, de sorte que j'utilise Reflection pour les parcourir de la même façon que ce qui suit:

List<string> propSuffixes = new List<string>();
for (int i=1; i<=20; i++)
{
propSuffixes.Add(i.ToString("D2")); // "01", "02", ..., "20"
}

XDocument xDoc = new XDocument(
new XElement("html",
new XElement("body",
propSuffixes
.Select(suffix =>
(string)typeof(MyPOCO)
.GetProperty("p" + suffix)
.GetValue(myPocoInstance))
.Select(v =>
new XElement("span", v, new XElement("br"))))));

Cela met les valeurs de chaîne des 20 propriétés dans leurs propres <span> avec un <br /> étiquette. Mais "j’aimerais avoir" juste "les valeurs de chaîne sans l’intervalle, mais toujours avec le <br /> à la fin de chaque ligne. C'est comme ça:

<html>
<body>
propertyValue1<br />
propertyValue2<br />
...
propertyValue20<br />
</body>
</html>

Est-ce même possible, ou est-ce contre une règle de validation XML? Et si c’est possible, comment puis-je le faire avec LINQ? La difficulté pour moi est de devoir retourner 2 object paramètres aux arguments de new XElement("body",...), mais aussi je ne sais pas comment faire passer ça string avant le <br /> aux arguments sans soulever quelques erreurs.

Connaissez-vous un moyen d’atteindre mon objectif, ou bien d’obtenir une mise en page similaire <p> au lieu de string plus <br />)?

Réponses:

1 pour la réponse № 1

Vous ne pourrez peut-être pas obtenir le <br /> à la fin de la ligne, mais vous pouvez certainement séparer le texte et les balises, comme ceci:

XElement root = new XElement("root");
root.Add(
new XText("Text"),
new XElement("tag"),
new XText("Text"),
new XElement("tag"),
new XText("Text"));