Écrivez et lisez facilement du XML à l'aide de XmlSerializer. Écriture et lecture faciles de XML à l'aide du système de fichiers XmlSerializer Write dans le fichier XML c

- des pages Web bien connues, qui sont également un analogue de XML avec des contrôles faibles.

Les objets XML Reader/Writer, FastInfoset et HTML étendent les capacités de lecture de fichiers texte avec le traitement intégré des balises de balisage.

Ils sont également utilisés pour les objets DOMBuilder/DOMRecord (voir ci-dessous) comme sources de données.

Les fichiers XML 1C contiennent des informations textuelles, c'est-à-dire qu'il s'agit de fichiers texte. Les objets 1C XML Reader et 1C Write XML sont un « module complémentaire » qui facilite le travail avec les balises XML dans un fichier 1C.

Les objets ReadingFastInfoset 1C et WritingFastInfoset 1C, ReadingHTML 1C et WritingHTML 1C sont complètement similaires à ReadingXML 1C et WritingXML 1C et servent à fonctionner de la même manière avec d'autres formats.

Fichier XML 1C utilisé dans les exemples

Annuaire>

Annuaire>

Valeur du texteProps>
Annuaire>
Configuration>

Exemple 1. Lecture d'un fichier XML 1C dans une arborescence de valeurs à l'aide de Reading XML 1C

//ouvre le fichier XML 1C pour le lire à l'aide de ReadingXML 1C
Fichier = Nouveau ReadXML();
File.OpenFile("D:\ConfigurationStructure.xml");

//prépare l'arbre de valeurs
//chaque branche XML peut avoir un nom, des attributs et une valeur
dzXML = NewValueTree();
dzXML.Columns.Add("Nom");
dzXML.Columns.Add("Valeur");
dzXML.Columns.Add("Attributs");

//puisqu'une chaîne XML peut avoir plusieurs attributs, nous les écrirons dans la table des valeurs
//chaque attribut a un nom et une valeur
tAttributes = New ValueTable();
tAttributes.Columns.Add("Nom");
tAttributes.Columns.Add("Valeur");

//le niveau d'imbrication va nous aider à comprendre quand il faut ajouter une branche imbriquée, et quand il faut remonter d'un niveau
Niveau d'imbrication = 0 ;
//la ligne actuelle est une limite d'arbre, elle changera à mesure que la nidification augmente
CurrentRow = Non défini ;
//la lecture du fichier XML 1C ne se fait pas ligne par ligne, mais selon la structure à la fin du fichier, la lecture retournera FALSE ;
Boucle While File.Read()

//on s'intéresse à trois types de nœuds - le début de l'élément, le texte (la valeur de l'élément) et la fin de l'élément (pour revenir au niveau supérieur)
Si File.NodeType = XMLNodeType.ElementStart Alors

Niveau d'imbrication = Niveau d'imbrication + 1 ;

// s'il s'agit de la première ligne, ajoutez-la tout en haut de l'arborescence et enregistrez uniquement le nom
Si CurrentRow = Non défini Alors
CurrentRow = dXML.Rows.Add();
CurrentLine.Name = Fichier.Name;
Continuer;
Sinon
//lignes imbriquées
CurrentRow = CurrentRow.Rows.Add();
CurrentLine.Name = Fichier.Name; //enregistre le nom

//est-ce que cet élément XML a des attributs ?
Si File.NumberAttributes() > 0 Alors
//si oui, copiez la table vide préparée pour enregistrer les attributs
tAttributesNode = tAttributes.Copy();
//fait défiler le nombre d'attributs de cet élément
Pour Compte = 0 par Fichier.Nombre d'Attributs()-1 Cycle
//pour chaque attribut, mémorisez le nom et la valeur
String = tNodeAttributes.Add();
Line.Name = File.AttributeName(Sch);
Ligne.Value = Fichier.AttributeValue(Ac);
Fin du cycle ;
//enregistre la table attributaire de l'élément sur la ligne actuelle
CurrentRow.Attributes = tNodeAttributes;
endIf;
endIf;

SinonSi File.NodeType = XMLNodeType.EndElement Alors
//au début de l'élément on augmente le niveau d'imbrication, à la fin de l'élément on le diminue
Niveau de nidification = Niveau de nidification - 1 ;
// renvoie la ligne actuelle d'un niveau au-dessus
CurrentRow = CurrentRow.Parent;

SinonSi File.NodeType = XMLNodeType.Text Alors
// si l'élément a une valeur, enregistrez-le simplement
CurrentRow.Value = Fichier.Value ;

endIf;

Fin du cycle ;

Fichier.Close();

Exemple 2. Enregistrement d'un fichier XML 1C à l'aide de l'objet 1C Record XML

//crée un fichier Enregistrement XML 1C
Fichier = NewWriteXML();
File.OpenFile("D:\ConfigurationStructure.xml", "UTF-8");
File.WriteElementStart("Configuration");

//utilise les métadonnées pour parcourir tous les répertoires (pour plus de détails, voir "Travailler avec les métadonnées")
Pour chaque répertoire du cycle Metadata.Directories

//WriteStartofElement - ouvre une nouvelle branche [subordonnée]
File.WriteElementStart("Répertoire");
//WriteAttribute - écrit un attribut dans une branche précédemment ouverte
Fichier.WriteAttribute("Nom", Répertoire.Nom);
File.WriteAttribute("Synonyme", Répertoire.Synonym);

//en utilisant les métadonnées, nous parcourons tous les détails du répertoire
Pour chaque accessoire du cycle Directory.Props




Fin du cycle ;

//utiliser les métadonnées pour parcourir toutes les parties tabulaires du répertoire
Pour chaque PM du Répertoire Parties Tabulaires du Cycle.
File.WriteElementStart("TabularPart");
Fichier.WriteAttribute("Nom", PM.Nom);
File.WriteAttribute("Synonyme", PM.Synonyme);

Pour chaque accessoire du cycle PM.Props
File.WriteElementStart("Props");
Fichier.WriteAttribute("Nom", Attribut.Nom);
File.WriteAttribute("Synonyme", Attributes.Synonym);
Fichier.WriteEndElement();
Fin du cycle ;

Fichier.WriteEndElement();
Fin du cycle ;

//WriteEndElement - "ferme" la branche précédemment ouverte à l'aide de WriteBeginElement
Fichier.WriteEndElement();
Fin du cycle ;

Fichier.WriteEndElement();
Fichier.Close();

Dans cet article, je souhaite décrire une méthode d'écriture et de lecture de fichiers XML à l'aide de la classe XmlSerializer.

Cette classe se trouve dans l’espace de noms System.Xml.Serialization de l’assembly System.Xml.dll.12.34 Element_Name> 56.78 Element_Name> Collection_Name> Root_Element_Name> Pour ce faire, il suffit d'implémenter deux méthodes qui encapsulent le corps des méthodes de sérialisation (SaveXml) et de désérialisation (LoadXml) : public static bool SaveXml(object obj, string filename) ( bool result = false; using ( StreamWriterwriter = new StreamWriter(filename)) ( try ( XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); XmlSerializer serializer = new XmlSerializer(obj.GetType()); serializer.Serialize(writer, obj, ns); result = true; ) catch (Exception e) ( // Journalisation) enfin (writer.Close(); ) return result ) objet statique public LoadXml (Type type, chaîne nom de fichier) ( object result = null ; using (StreamReader reader = new StreamReader(filename)) ( try ( XmlSerializer serializer = new XmlSerializer(type); result = serializer.Deserialize(reader); ) catch (Exception e) ( // Journalisation) enfin ( reader.Close( ) ) renvoie le résultat ; ) Je vais maintenant donner un exemple complet d'utilisation des méthodes ci-dessus : Item item = new Item();