web-dev-qa-db-fra.com

Convertir XElement en chaîne

J'ai un simple objet XElement

XElement xml = new XElement("XML",
    new XElement ("TOKEN",Session["Token"]),
    new XElement("ALL_INCLUSIVE", "0"),
    new XElement("BEACH", "0"),
    new XElement("DEST_DEP", ddlDest.SelectedValue.ToString()),
    new XElement("FLEX", "0")
);

Où voulez vider le contenu dans une chaîne. Exactement comme le fait Console.Writeline(xml);, mais je veux le contenu dans une chaîne. J'ai essayé plusieurs méthonds. xml.ToString(); ne retourne rien par lui-même.

33
user236337

ToString devrait très certainement fonctionner. Je l'utilise tout le temps. Que vous rapporte-t-il dans ce cas? Une chaîne vide? Je suppose que quelque chose s'est mal passé lors de la construction de votre XElement. Pour déboguer, réécrivez le code pour ajouter chacun des enfants XElement séparément, afin de pouvoir parcourir votre code et vérifier chacun d'eux. Ensuite, avant d'exécuter le .ToString, Dans la fenêtre Paramètres locaux, examinez la variable [xml] Développée en xml.

En bref, votre problème se produit avant même que vous n'obteniez la méthode ToString().

50
Patrick Karcher

ToStringfonctionne, mais il renvoie le contenu, y compris la balise XElement elle-même. Si vous avez besoin de XML interne sans balise racine ("" dans votre exemple), vous pouvez utiliser la méthode d'extension suivante:

public static class XElementExtension
{
    public static string InnerXML(this XElement el) {
        var reader = el.CreateReader();
        reader.MoveToContent();
        return reader.ReadInnerXml();
    }
}

Ensuite, appelez-le simplement: xml.InnerXML();

9
Mike Keskinov