118 votes

XDocument.ToString() laisse tomber la balise d'encodage XML

Existe-t-il un moyen d'obtenir l'encodage xml dans la fonction toString() ?

Exemple :

xml.Save("myfile.xml");

conduit à

<?xml version="1.0" encoding="utf-8"?>
<Cooperations>
  <Cooperation>
    <CooperationId>xxx</CooperationId>
    <CooperationName>Allianz Konzern</CooperationName>
    <LogicalCustomers>

Mais

tb_output.Text = xml.toString();

conduit à une sortie comme celle-ci

<Cooperations>
  <Cooperation>
    <CooperationId>xxx</CooperationId>
    <CooperationName>Allianz Konzern</CooperationName>
    <LogicalCustomers>
    ...

2voto

sonjz Points 926

Similaire aux autres réponses +1, mais un peu plus de détails sur la déclaration, et une concaténation légèrement plus précise.

<xml /> doit être sur sa propre ligne dans un XML formaté, je m'assure donc que la nouvelle ligne a été ajoutée. REMARQUE : l'utilisation de Environment.Newline afin qu'il produise le saut de ligne spécifique à la plate-forme

// Parse xml declaration menthod
XDocument document1 =
  XDocument.Parse(@"<?xml version=""1.0"" encoding=""iso-8859-1""?><rss version=""2.0""></rss>");
string result1 =
  document1.Declaration.ToString() +
  Environment.NewLine +
  document1.ToString() ;

// Declare xml declaration method
XDocument document2 = 
  XDocument.Parse(@"<rss version=""2.0""></rss>");
document2.Declaration =
  new XDeclaration("1.0", "iso-8859-1", null);
string result2 =
  document2.Declaration.ToString() +
  Environment.NewLine +
  document2.ToString() ;

Les deux résultats produisent :

<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"></rss>

0voto

David Points 53
string uploadCode = "UploadCode";
string LabName = "LabName";
XElement root = new XElement("TestLabs");
foreach (var item in returnList)
{  
       root.Add(new XElement("TestLab",
                new XElement(uploadCode, item.UploadCode),
                new XElement(LabName, item.LabName)
                            )
               );
}

XDocument returnXML = new XDocument(new XDeclaration("1.0", "UTF-8","yes"),
             root);

string returnVal;
using (var sw = new MemoryStream())
{
       using (var strw = new StreamWriter(sw, System.Text.UTF8Encoding.UTF8))
       {
              returnXML.Save(strw);
              returnVal = System.Text.UTF8Encoding.UTF8.GetString(sw.ToArray());
       }
}

// ReturnVal has the string with XML data with XML declaration tag

0voto

Tore Aurstad Points 857

Méthode d'extension pour inclure la déclaration Xml, en utilisant l'interpolation de chaîne ici et en choisissant d'ajouter une nouvelle ligne après la déclaration xml car c'est la norme, je suppose.

public static class XDocumentExtensions {

public static string ToStringIncludeXmlDeclaration(this XDocument doc){
               return $"({((doc.Declaration != null ? doc.Declaration.ToString() + 
     Environment.NewLine : string.Empty) + doc.ToString())}";
    }  
  }
}

Utilisation :

tb_output.Text = xml.ToStringIncludeXmlDeclaration();

0voto

Gus Paul Points 430

Vous pouvez également utiliser un XmlWriter et appeler la fonction

Writer.WriteDocType() 

méthode.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X