2009-05-12 8 views
2

J'utilise la classe SyndicationFeed pour générer un flux Atom et un Atom10FeedFormatter pour le sérialiser. Je voudrais être en mesure d'ajouter des sauts de ligne entre les éléments lorsque le fichier est écrit sur le disque. Je me rends compte que les lecteurs de flux ne s'en soucient pas, mais quand je cours mes documents par http://feedvalidator.org/, il traite tout le document comme une seule ligne, ce qui en fait un PITA pour voir où sont mes erreurs puisque chaque erreur est sur la ligne 1.Comment ajouter des sauts de ligne à la sortie sérialisée d'un objet SyndicationFeed?

Par exemple, au lieu de la production comme ceci:

<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Title For My Feed</title><subtitle type="text">Subtitle for my feed.</subtitle><id>uuid:d2ad3f53-6f1a-4495-ba92-ab3231413f97;id=1</id><updated>2009-05-12T19:42:56Z</updated><author><name>Matt</name>... 

J'aimerais obtenir une sortie quelque chose comme ceci:

<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom"> 
    <title type="text">Title For My Feed</title> 
    <subtitle type="text">Subtitle for my feed.</subtitle> 
    <id>uuid:d2ad3f53-6f1a-4495-ba92-ab3231413f97;id=1</id> 
    <updated>2009-05-12T19:42:56Z</updated> 
    <author> 
    <name>Matt</name> 
    ... 

Voici le code que je me sers de sérialisation, juste cas il importe:

XmlWriter atomWriter = XmlWriter.Create(@"atom.xml"); 
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(TheFeed); 
atomFormatter.WriteTo(atomWriter); 
atomWriter.Close(); 

Répondre

2

La classe XmlWriter a une propriété Settings qui vous permet de mettre en forme votre xml dans un nombre de manières, y compris le formatage de ligne et aussi l'indentation. Il s'agit du MSDN reference.

2

Joseph's answer obtient le crédit pour me pointer à la bonne classe. Ce qui suit sont les spécificités pour quiconque cherche le codez.

Tout ce que j'avais à faire était de dire à l'objet XmlWriter de mettre en retrait la sortie. Cela a été facilement accompli en modifiant la propriété Indent de l'objet settings à true. Donc, mon code original pour sérialiser le flux (ci-dessus) a été édité comme suit:

XmlWriterSettings WriterSettings = new XmlWriterSettings(); 
WriterSettings.Indent = true; 

XmlWriter atomWriter = XmlWriter.Create(@"atom.xml", WriterSettings); 
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(TheFeed); 
atomFormatter.WriteTo(atomWriter); 
atomWriter.Close();