3 votes

Comment ignorer les espaces blancs et les nouvelles lignes en XML

J'ai un fichier XML dans lequel je vais parcourir les noeuds et obtenir les valeurs des attributs.

Mais en plus des valeurs d'attributs, j'obtiens également des symboles (boîte rectangulaire) dans la sortie. Si j'essaie de supprimer l'espace entre les balises, tout se passe bien.

Dans le XML ci-dessous, j'obtiens le texte intérieur du titre.

 <catalog>
  <book id="bk101">
   <details>
    <title>XML Developer's Guide</title>
   </details>
  </book>
  </catalog>

Ce n'est pas grave si ma contribution est comme ça :

  <catalog>
   <book id="bk101">
   <details><title>XML Developer's Guide</title></details>
   </book>
  </catalog>

J'utilise C#

 foreach (XmlNode catalogid in Xmlcontent.GetElementsByTagName("catalog"))
      {
        foreach (XmlNode bookid in catalogid)
                    {
                        foreach (XmlNode titleid in bookid)
                        {
                       string booktitle = titleid.InnerText.ToString();
                        }
                     }
      }

Veuillez me suggérer comment je peux ignorer les espaces blancs et les nouvelles lignes dans ma sortie.

1voto

Aghilas Yakoub Points 16682

Vous pouvez essayer avec ce code basé sur PreserveWhitespace propriété

XmlDocument doc = new XmlDocument();
....
....
doc.PreserveWhitespace = false;

Lien : http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace.aspx

1voto

Chuck Savage Points 6106

Êtes-vous limité à l'utilisation de .Net 2.0 ? Si c'est le cas, ne tenez pas compte de ce qui suit.

Si vous pouvez utiliser .Net 3.5, le Linq-To-Xml suivant fonctionnera pour vous.

  1. Chargez d'abord le fichier
  2. Obtenir tous les éléments du catalogue comme vous l'avez fait
  3. Sélectionnez ensuite tous les livres d'un catalogue
  4. Obtenir l'identifiant et le titre du livre
  5. Affecter tous les livres de tous les catalogues à une variable books sous la forme d'un tableau.

.

XElement root = XElement.Load(file);
var catalogs = root.Descendants("catalog");
var books = catalogs.SelectMany(c => 
    c.Descendants("book").Select(book => new
    {
        Id = book.Attribute("id").Value,
        Title = book.Descendants("title").First().Value
    }))
    //.OrderBy(b => b.Title)  // sort by title or id if you'd like.
    .ToArray();

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