Maître du plan tarifaire de majordomo. De jolis bonus du fournisseur d'hébergement Majordomo

Travailler avec XML dans .NET

Informatique, cybernétique et programmation

Cours 8. Travailler avec XML dans .NET Plan 1. Cours pour travailler avec XML .NET 2. Lecture et écriture de flux de données XML 2.1. Utilisation de la classe XmlReader 2.2. Méthodes de lecture des données 2.3. Contrôler les types de données lors de la lecture d'un document XML 3. Créer un document XML dans Studio visuel 1. Cours pour travailler avec XML .NET Beaucoup

ukrainien

Conférence 8. Travailler avec XML dans .NET

Plan

1. Cours pour travailler avec XML. FILET

2.1. Utiliser la classe Lecteur XML

2.2. Méthodes de lecture des données

Document XML

1. Cours pour travailler avec XML. FILET

De nombreux composants de la technologie .NET sont inextricablement liés à XML. Cela signifie que XML est bien pris en charge par la bibliothèque de classes Framework. Les technologies suivantes sont prises en charge dans .NET :

  1. XML1.0
  2. Espaces de noms XML
  3. Schémas XSD
  4. Expressions XPath
  5. Transformations XSL
  6. Noyau DOM niveau 1, noyau DOM niveau 2

Mercredi. FILET Framework vous permet non seulement d'utiliser XML dans applications créées, mais elle l'utilise également dans les fichiers de configuration, la documentation pour code source et dans le manifeste de l'assemblée.

Exemple 1 : manifeste d'assemblage

Cours pour travailler avec XML collecté dans l'espace de noms Système. XML . Cet espace est chargé avec des classes qui peuvent être utilisées pour traiter les données XML.

Tableau 1. Principales classes de lecture et d'écriture de données XML

Lecteur XML

Classe abstraite qui effectue la lecture et fournit une livraison rapide des données non mises en cache XML . La classe est un analyseur unidirectionnel

XMLWriter

Une classe abstraite qui écrit des données sous forme de flux ou de fichier

Lecteur de texte XML

Élargit les capacités de la classe Lecteur XML . Fournit un accès en streaming unidirectionnel aux données XML

XmlTextWtitre

Élargit les capacités de la classe XML. Écrivain XML

Tableau 2. Quelques classes de traitement de données XML

Noeud XML

Classe abstraite représentant un nœud dans XML -document. Classe de base pour certaines autres classes

DocumentXml

Étend la classe XmlNode . Représente la mise en œuvre DOM par W3C . Fournit une vue arborescente XML -document en mémoire avec des capacités de navigation et d'édition

Navigateur XML

Permet de naviguer dans le document

XMLDataDocument

sert de pont entre les entrepôts de données et les données relationnelles stockées dans Ensemble de données

2. Lire et écrire des flux de données XML

Mercredi. FILET Framework prend en charge deux méthodes de traitement XML -documents : streaming entrée-sortie et DOMAINE . Cours abstraits XmlReader, XmlWriter et les classes qui en dérivent prennent en charge le modèle d'E/S en streaming.

Cours basés sur XmlReader fournit rapidement curseur unidirectionnel, qui organise le flux de données XML pour le traitement.

À partir de XMLReader les classes suivantes sont générées :

Par XmlWriter les classes suivantes sont générées :

XmlTextWriter

Élargit les capacités de la classe XML. Écrivain . Fournit une génération rapide de threads unidirectionnels XML

SortieXmlQuery

Élargit les capacités de la classe XML. Écrivain, Fournit fonctionnalité requise pour afficher les résultats des transformations XSLT.

Pour travailler avec des données, chacune des classes fournit les méthodes nécessaires.

2.1. Utiliser la classe Lecteur XML

Exemple de lecture de données XML à partir du fichier. Les données sont stockées dans un fichier"livre2.xml" et représentent une description du catalogue de livres :

Pays du monde

Club de lecture

Kharkov

380

$4.00

Les secrets du travail sous Windows

David McCormick

Kharkov

300

$5.20

Sélection et mise à niveau d'un ordinateur

Mikhaïl Koutouzov

Saint-Pétersbourg - Moscou

320

$6.30

3D maximum

Callie Murdoch

Kyiv - Moscou

1050

$10.95

Système <span>Programmation</span> Delphes

Volkov Andreï

Moscou

800

$10.95

Comment construire votre propre ordinateur

John Causley

Moscou

300

$6.90

dfsdfdfsdf

sdfsdf

fivavaiva

234

$12.8

Créons un formulaire avec deux boutons et un éditeur de texte (richTextBox1), dans lequel nous placerons les données lues.

Lorsque le bouton est enfoncé LireXml lecture et analyse en cours XML -file et exportez-le vers un éditeur de texte. Gestionnaire Boutons ReadXML_Click :

private void ReadXML_Click (expéditeur de l'objet, EventArgs e)

//lire le fichier

RichTextBox1.Clear(); //nettoyage de l'éditeur

XmlReader rdr = XmlReader .Create("book2.xml" );//création d'un objet rdr

tandis que (rdr.Read())

si (rdr.NodeType == XmlNodeType .Text)

RichTextBox1.AppendText(rdr.Value +"\r\n" );

Classe XMLReader est abstrait, c'est-à-dire que pour de telles classes, vous ne pouvez pas créer d'objets à l'aide de l'opérateur nouveau . Pour qu’il soit utilisable, il doit inclure des méthodes statiques.

Ce gestionnaire utilise une méthode statique Créer qui renvoie un objet XMLReader. Plus loin dans la boucle while Chaque ligne du fichier est lue. Au fur et à mesure que vous lisez, la propriété est vérifiée Type de nœud . Si le nœud est un nœud de texte, son contenu est ajouté à l'éditeur de texte.

2.2. Méthodes de lecture des données

Cours pour travailler avec XML proposer plusieurs moyens de se déplacer XML -document. Par exemple, la méthode Lire() passe au nœud suivant. Ensuite, vous pouvez vérifier si ce nœud a du contenu ( HasValue()) ou des attributs (YasAttributes()).

Les principales méthodes d'analyse des documents sont présentées dans le tableau ci-dessous.

Lire()

lit l'enregistrement suivant et le déplace vers le nœud suivant

AValeur()

renvoie vrai faux sinon

AAttributs()

analyse un élément pour les attributs. Retours vrai si l'élément a du contenu, FAUX sinon

LireÉlémentDébut()

vérifie si un nœud est le nœud racine, puis passe au nœud suivant. Si le nœud n'est pas la racine, une exception est levée XmlException.

EstStartElement()

similaire à la méthode LireÉlémentDébut()

LireChaîne()

lire une ligne d'un fichier contenant un document

LireElementString()

similaire à la méthode ReadString () sauf que vous pouvez lui passer le nom de l'élément. Si le nœud de contenu suivant n'est pas le handle de départ ou si le paramètre Nom ne correspond pas au paramètre de nœud actuel, une exception est levée

DéplacerVersContenu()

accéder au contenu du nœud

Exemple 2 : affichage d'éléments individuels Document XML

Considérons l'application de la méthode LireElementString () et d'autres méthodes, ainsi que l'utilisation de flux de fichiers (lecture à partir d'un fichier).

N'oubliez pas de vous connecter en utilisant System.IO ;

Ajouter un bouton au formulaire Lire à partir du fichier. Le code du gestionnaire sera le suivant :

private void btmReadXml2_Click (expéditeur de l'objet, EventArgs e)

//lire uniquement le titre des livres (élément "TITRE"

RichTextBox1.Clear();

FileStream fs = new FileStream("book2.xml" , FileMode .Open);

XmlReader rdr = XmlReader .Create(fs);

tandis que (!rdr.EOF)

//Si nous rencontrons un type d'élément, vérifiez-le et chargez-le dans la fenêtre

RichTextBox1.AppendText(rdr.ReadElementString() +"\r\n" );

autre

// sinon - passer à l'enregistrement suivant

Rdr.Read();

Dans cet exemple dans la boucle alors que la méthode MoveToContent() est utilisée pour trouver un nœud de type Type de nœud XML . Élément avec le titre du livre rdr.Name =="TITRE")

if (rdr.MoveToContent() == XmlNodeType .Element && rdr.Name == "TITLE" )

Le scan est effectué jusqu'à la fin du fichier (condition de boucle

tandis que (!rdr.EOF)

Si le type de nœud n'est pas un élément ou si son nom ne correspond pas"TITRE"(!LANG : , alors la méthode s'appelle Lire () pour passer au nœud suivant. Si le prochain nœud"TITLE " trouvé, son contenu est ajouté à la fenêtre de sortie. De cette façon, seuls les titres des livres seront affichés.

2.3. Contrôle des types de données lors de la lecture Document XML

Classe XMLReader vous permet également de lire des données avec une vérification de type rigoureuse. Méthodes utilisées pour cela ReadElementContentAs ... ReadElementContentAsDouble(), ReadElementContentAsBoolean () et autres. Ce qui suit montre comment lire une valeur au format décimal et effectuer des calculs. Dans l'exemple, la valeur du prix comptable est sélectionnée, qui est augmentée de 25 %.

Créons un autre bouton avec l'inscription Nouveau prix , et dans son gestionnaire nous écrirons le code :

private void btnNewPrice_Click (expéditeur de l'objet, EventArgs e)

//Gestionnaire de bouton NewPrice - contrôle de type

RichTextBox1.Clear();

XmlReader rdr = XmlReader .Create("book2.xml" ); !}

tandis que (rdr.Read())

si (rdr.NodeType == XmlNodeType .Element)

if (rdr.Name == "PRIX" )

décimal prix = rdr.ReadElementContentAsDecimal();

RichTextBox1.AppendText("Prix actuel = " + prix+ "\r\n" );

Prix ​​+= prix * (décimal)0,25 ;

RichTextBox1.AppendText("Nouveau prix = " + prix + "\r\n\r\n" );

sinon si (rdr.Name== "TITLE" )

RichTextBox1.AppendText(rdr.ReadElementContentAsString()+"\r\n" );

rdr.Close();

Si cette valeur ne peut pas être convertie dans le type requis, une exception est levée FormatException.

Nous compilons et lançons notre projet.

En conséquence, nous recevons un message d'erreur. Raison Le texte de l'élément ressemble à :

< PRICE >$10.95

Nous réparerons tous les éléments< PRICE > 10.95,

et enregistrez le document sous le nom("livre 3 .xml" );

En conséquence nous obtenons :

3. Créez un document XML dans Visual Studio

Pour créer un fichier XML dans Visual Studio, sélectionnez Nouveau -> Fichier dans le menu Fichier . Dans la fenêtre de création, sélectionnez Fichier XML

XML s'ouvrira -éditeur dans lequel vous pouvez saisir des éléments XML . L'éditeur vérifie automatiquement les erreurs et insère des balises de fermeture. Le fichier créé peut être enregistré à l'emplacement souhaité sur le disque avec la commande Enregistrer le fichier XML. xml Comme...


Ainsi que d'autres ouvrages qui pourraient vous intéresser

25682. Intestin grêle 57,5 Ko
Les cellules épithéliales intestinales d'un embryon de 4 semaines ne sont pas différenciées et se caractérisent par une activité proliférative élevée. À ce stade, les cellules transitionnelles avec des granules indifférenciés prédominent parmi les endocrinocytes ; les cellules EC, les cellules G et les cellules S sont détectées. Pendant la période fœtale, les cellules CE prédominent, dont la plupart ne communiquent pas avec la lumière de la crypte type fermé; apparaît à la fin de la période fœtale type ouvert cellules. Les cryptes contiennent des éléments épithéliaux cambiaux et des cellules qui s'en différencient.
25683. métabolisme du sel. 44,5 Ko
De plus, ces tissus participent au métabolisme eau-sel. Le tissu cartilagineux fait partie des organes du système respiratoire, des articulations, des disques intervertébraux, etc. Le tissu cartilagineux frais contient environ 7 080 eau, 1 015 substances organiques et 47 sels.
25684. Embryogenèse 239,5 Ko
Dans le même temps, des caractéristiques apparaissent qui distinguent le développement humain de celui des autres vertébrés. Le processus de développement intra-utérin d'un embryon humain dure en moyenne 280 jours et 10 mois lunaires. Le développement embryonnaire humain est généralement divisé en 3 périodes : initiale 1ère semaine embryonnaire 2ème 8ème semaine fœtale à partir de la 9ème semaine de développement jusqu'à la naissance de l'enfant.
25685. Tissus épithéliaux. Épithélies de surface 36 Ko
La nutrition des cellules épithéliales s'effectue de manière diffuse à travers la membrane basale du côté du tissu conjonctif sous-jacent avec lequel l'épithélium est en étroite interaction. Conformément à la forme des cellules qui composent l'épithélium monocouche, ces derniers sont divisés en cubes squameux plats et en colonnes prismatiques. 1L'épithélium monocouche peut être à une ou plusieurs rangées. Un tel épithélium est également appelé isomorphe.
25686. Testicules 60 Ko
Durant la période postnatale, les gonocytes se multiplient dans les tubules séminifères et l'épithélium des cordons génitaux demeure comme cellules de soutien. La couche basale, la couche fibreuse interne située entre les deux membranes basales de l'épithélium spermatogène et des cellules myoïdes, est constituée d'un réseau de fibres de collagène. Directement adjacente à la couche myoïde se trouve une couche non cellulaire formée par la membrane basale des cellules myoïdes et des fibres de collagène. Derrière eux se trouve une couche constituée de cellules ressemblant à des fibroblastes adjacentes à la couche basale...
25687. Ovaires 58,5 Ko
Dès le 3ème mois de développement, environ la moitié des ovogonies commencent à se différencier en un ovocyte de premier ordre, période de petite croissance située dans la prophase de la méiose. Au moment de la naissance, le nombre d'oogonies diminue progressivement et atteint environ 45 la plupart les cellules subissent une atrésie; les cellules principales sont des ovocytes de premier ordre entrés en période de croissance. Stade 2, la période de croissance se produit dans un ovaire fonctionnel et consiste en la transformation de l'ovocyte de 1er ordre du follicule primaire en ovocyte de 1er ordre dans le follicule mature. Étape 3...
25688. Cellules reproductrices mâles 40 Ko
La vitesse de leur mouvement chez l'homme est de 3050 μm. Le mouvement intentionnel est facilité par le mouvement de chimiotaxie vers ou loin d'un stimulus chimique et le mouvement de rhéotaxie à contre-courant du liquide. Les cellules reproductrices masculines humaines, spermatozoïdes ou spermatozoïdes, mesurent 70 microns de long et possèdent une tête et une queue. Le noyau du sperme humain contient 23 chromosomes, dont l'un est sexuel X ou Y, les autres sont des autosomes.
25689. Concept du système sanguin. Globules rouges 47 Ko
Le système sanguin comprend le sang, les organes hématopoïétiques, la moelle osseuse rouge, le thymus, la rate, les ganglions lymphatiques, le tissu lymphoïde et les organes non hématopoïétiques. Les éléments du système sanguin ont une origine commune à partir du mésenchyme et les caractéristiques structurelles et fonctionnelles sont soumises aux lois générales de la régulation neurohumorale et sont unies par l'interaction étroite de tous les maillons. Ainsi, la composition constante du sang périphérique est maintenue par les processus équilibrés de nouvelle formation d'hématopoïèse et de destruction des cellules sanguines.
25690. SYSTÈME URINAIRE 41 Ko
La longueur de ses tubules peut atteindre 50 mm et tous les néphrons mesurent en moyenne environ 100 km. Les 15 néphrons restants sont situés dans le rein de sorte que leurs corpuscules rénaux contournés proximaux et distaux se trouvent dans le cortex, à la frontière avec la moelle. Ainsi, le cortex et la moelle des reins sont formés de différentes parties de trois types de néphrons. Le cortex est constitué de corpuscules rénaux, de tubules contournés proximaux et distaux de tous types de néphrons.

Dans le premier article du blog .NET, « Travailler avec XML », les personnes dans les commentaires ont demandé un article sur LINQ to XML. Eh bien, essayons de révéler les principes de fonctionnement de ceci nouvelle technologie de Microsoft.

Créons une base pour maintenir un catalogue d'enregistrements audio. La base de données sera composée de pistes :

  • Nom
  • Exécuteur
  • Album
  • Durée
Nous apprendrons comment ajouter, modifier, supprimer et effectuer diverses sélections dans notre base de données.

Tout d'abord, créons application console(J'écris mes projets en C#, mais l'essence sera généralement claire pour tout le monde) et connecte l'espace de noms nécessaire

Utilisation de System.Xml.Linq ;

Génération de fichiers XML

Créons Fichier XML notre base de données contenant plusieurs enregistrements de tests utilisant LINQ :

//définit le chemin d'accès à notre fichier XML de travail string fileName = "base.xml"; //compteur du numéro de piste int trackId = 1; //Création par constructeurs imbriqués. XDocument doc = new XDocument(new XElement("library", new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Rap"), new XAttribute("time", " 3:24"), nouveau XElement("nom", "Who We Be RMX (feat. 2Pac)"), nouveau XElement("artiste", "DMX"), nouveau XElement("album", "")), new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre", "Rap"), new XAttribute("time", "5:06"), new XElement("nom", "Angel (ft. Regina Bell)"), nouveau XElement("artiste", "DMX"), nouveau XElement("album", "...And Then There Was X")), nouveau XElement("piste", new XAttribute("id", trackId++), new XAttribute("genre", "Break Beat"), new XAttribute("time", "6:16"), new XElement("name", "Dreaming Your Dreams") , new XElement("artiste", "Hybride"), new XElement("album", "Wide Angle")), new XElement("track", new XAttribute("id", trackId++), new XAttribute("genre" , "Break Beat"), new XAttribute("time", "9:38"), new XElement("name", "Finished Symphony"), new XElement("artist", "Hybrid"), new XElement(" album", "Grand Angle")))); //sauvegardons notre document doc.Save(fileName);

Désormais, après le lancement, un fichier XML avec le contenu suivant apparaîtra dans le dossier contenant notre programme :
Qui nous sommes RMX (feat. 2Pac) DMX La mixtape Dogz : qui est le prochain ?! Ange (ft. Regina Bell) DMX ...Et puis il y eut X Rêver vos rêves Hybride Grand angle Symphonie terminée Hybride Grand angle

Pour créer un tel fichier à l'aide de XmlDocument, le code nécessitait environ 2 fois plus. Dans le code ci-dessus, nous avons utilisé le constructeur de la classe XDocument, qui prend en paramètre une liste d'éléments enfants avec lesquels on souhaite initialement initialiser le document. Le constructeur XElement utilisé prend en paramètre le nom de l'élément que l'on crée, ainsi qu'une liste d'éléments d'initialisation. Idéalement, nous pouvons définir à la fois de nouveaux XElement et XAttribute dans ces éléments. Ces derniers seront rendus indépendamment dans notre fichier sous forme d'attributs. Si vous n'aimez pas utiliser une telle imbrication de constructeurs et que vous considérez un tel code comme encombrant, vous pouvez le réécrire dans une version plus traditionnelle. Le code ci-dessous générera un fichier XML similaire :

XDocument doc = nouveau XDocument(); Bibliothèque XElement = new XElement("bibliothèque"); doc.Add (bibliothèque); //crée l'élément "track" XElement track = new XElement("track"); //ajoute les attributs nécessaires track.Add(new XAttribute("id", 1)); track.Add(new XAttribute("genre", "Rap")); track.Add(new XAttribute("time", "3:24")); //crée l'élément "name" XElement name = new XElement("name"); name.Value = "Who We Be RMX (feat. 2Pac)"; track.Add(name); //создаем элемент "artist" XElement artist = new XElement("artist"); artist.Value = "DMX"; track.Add(artist); //Для разнообразия распарсим элемент "album" string albumData = "!} La mixtape Dogz : qui est le prochain ?!"; XElement album = XElement.Parse(albumData); track.Add(album); doc.Root.Add(track); /* *ajouter les éléments restants de la même manière */ //sauvegarder notre document doc.Save( nom de fichier);

Naturellement, vous devez choisir la méthode nécessaire en fonction de la situation.

Lire les données d'un fichier

//définit le chemin d'accès à notre fichier XML de travail string fileName = "base.xml"; //lire les données du fichier XDocument doc = XDocument.Load(fileName); //on parcourt chaque élément de la nouvelle bibliothèque //(cet élément est immédiatement accessible via la propriété doc.Root) foreach (XElement el in doc.Root.Elements()) ( //Affiche le nom de l'élément et le valeur de l'attribut id Console.WriteLine(" (0) (1)", el.Name, el.Attribute("id").Value); Console.WriteLine(" Attributs:"); attributs dans une boucle, voyez en même temps comment ils se convertissent en chaîne foreach (XAttribute attr in el.Attributes()) Console.WriteLine(" (0)", attr); ; // affiche les noms de tous les éléments enfants et leurs valeurs dans une boucle foreach (élément XElement) dans el.Elements()) Console.WriteLine(" (0): (1)", element.Name, element. Valeur )

Ici, dans le code, je pense, il n'y a rien de compliqué et des commentaires sont fournis. Après avoir exécuté notre programme, le résultat suivant sera affiché dans la console :

Piste 1 Attributs : id="1" genre="Rap" time="3:24" Éléments : nom : Who We Be RMX (feat. 2Pac) artiste : DMX album : The Dogz Mixtape : Who"s Next ?! 2 Attributs : id="2" genre="Rap" time="5:06" Éléments : nom : Angel (ft. Regina Bell) artiste : DMX album : ...And Then There Was X piste 3 Attributs : id= "3" genre="Break Beat" time="6:16" Éléments : nom : Dreaming Your Dreams artiste : Album hybride : Wide Angle piste 4 Attributs : id="4" genre="Break Beat" time="9 : 38" Éléments : nom : Artiste Symphony fini : Album hybride : Grand Angle

Modification des données

Essayons de parcourir tous les nœuds de la bibliothèque et d'augmenter l'attribut Id de l'élément track de 1.
(Je n'écrirai pas plus loin la déclaration du chemin d'accès au fichier et le résultat de la sortie vers la console, pour ne pas surcharger l'article avec des informations inutiles, j'ai tout compilé, tout fonctionne :)):

//Obtenir le premier nœud enfant de la bibliothèque XNode node = doc.Root.FirstNode; while (node ​​​​!= null) ( //vérifie que le nœud actuel est un élément if (node.NodeType == System.Xml.XmlNodeType.Element) ( XElement el = (XElement)node; //obtenir la valeur de l'attribut id et convertissez-le en Int32 int id = Int32.Parse(el.Attribute("id").Value); // augmente le compteur de un et attribue la valeur id++; Value = id.ToString() ; ) //passer au nœud suivant node = node.NextNode ) doc.Save(fileName);

Essayons maintenant de le faire d'une manière plus correcte pour nos tâches :

Foreach (XElement el dans doc.Root.Elements("track")) ( int id = Int32.Parse(el.Attribute("id").Value); el.SetAttributeValue("id", --id); ) doc.Save(fileName);

Comme vous pouvez le constater, cette méthode nous convenait mieux.

Ajouter une nouvelle entrée

Ajoutons une nouvelle piste à notre bibliothèque et calculons en même temps l'identifiant unique suivant pour la piste à l'aide de LINQ :

Int maxId = doc.Root.Elements("track").Max(t => Int32.Parse(t.Attribute("id").Value)); XElement track = new XElement("track", new XAttribute("id", ++maxId), new XAttribute("genre", "Break Beat"), new XAttribute("time", "5:35"), new XElement("nom", "Plus haut qu'un gratte-ciel"), new XElement("artiste", "Hybride"), new XElement("album", "Morning Sci-Fi")); doc.Root.Add(piste); doc.Save(fileName);

Avec une telle requête posée à tous les éléments, la valeur maximale de l'attribut id des pistes est calculée. Lors de l'ajout, nous incrémentons la valeur maximale résultante. L'ajout d'un élément en lui-même revient à appeler la méthode Add. Veuillez noter que nous ajoutons des éléments à Root, sinon nous briserons la structure du document XML en y déclarant 2 éléments racine. N'oubliez pas non plus de sauvegarder votre document sur le disque, car jusqu'à la sauvegarde, aucune modification apportée à notre XDocument ne sera reflétée dans le fichier XML.

Supprimer des éléments

Essayons de supprimer tous les éléments d'artiste DMX :

IEnumerable tracks = doc.Root.Descendants("track").Where(t => t.Element("artist").Value == "DMX").ToList(); foreach (XElement t in tracks) t.Remove(); !}

Dans cet exemple, nous avons d’abord sélectionné toutes les pistes dont l’élément enfant artst répondait aux critères, puis avons supprimé ces éléments en boucle. L'appel en fin de sélection à ToList() est important. En faisant cela, on enregistre dans une zone mémoire séparée tous les éléments que l’on souhaite supprimer. Si nous décidons de supprimer de l'ensemble d'enregistrements que nous parcourons directement dans la boucle, nous obtiendrons la suppression du premier élément et de la NullReferenceException suivante. Il est donc important de s'en souvenir.
Sur les conseils de xaoccps, vous pouvez supprimer davantage d'une manière simple:
IEnumerable tracks = doc.Root.Descendants("track").Where(t => t.Element("artist").Value == "DMX"); tracks.Remove(); !}
Dans ce cas, il n'est pas nécessaire de convertir notre résultat résultant en liste en appelant la fonction ToList(). Pourquoi cette méthode n'a-t-elle pas été décrite à l'origine dans

Grade: 5

Hébergement normal/VPS, pourquoi rattraper son retard. Eh bien, la disponibilité n'est certainement pas excellente, quelque chose sur lequel il faut travailler, mais le VPS dispose toujours du logiciel le plus récent + les prix sont assez bas pour de telles capacités, donc il peut plutôt bien fonctionner. Mais ils ne sont pas à l'épreuve des abus et c'est le plus gros inconvénient car il n'y a rien pour poster des torrents, de la musique, des logiciels ici car ils seront abusés et c'est tout... Et donc, les VPS sont rapides, il y a beaucoup d'espace pour ce genre d'argent, mais je pense que ces prix sont bas en raison du fait qu'ils ne sont pas à l'épreuve des balles, mais il y a tellement d'espace pas pour les torrents, etc. Je ne sais même pas pourquoi une telle puissance est nécessaire... Eh bien, écrivez peut-être simplement un livre d'information ou un article sur WP, et cela a du sens :). Donc, cela vaut la peine d'y prêter attention si vous avez grands projets et ils ne violent pas le droit d'auteur, sinon ça ne sert à rien de payer de l'argent ici, il vaut mieux trouver quelque chose d'encore moins cher car je ne respecte pas l'hébergement, je prends toujours des VPS.

Grade: 5

Lors de la création de mon site personnel (thème artiste), ce qui m'a pris beaucoup de temps, mes souffrances n'ont pas pris fin, je devais m'assurer que je ne sois pas le seul à l'admirer, mais que d'autres puissent visiter ma galerie.
J'avais besoin d'un endroit où se situerait le site, naturellement en phase avec mon hobby. J'ai choisi Majordomo.ru car c'est l'un des services d'hébergement les moins chers par an. Seulement 140 roubles, et vous êtes déjà de la tête et des épaules au-dessus de vos collègues qui n'ont pas de site Internet ! Je pense que 140 roubles, ce n'est pas du tout de l'argent, surtout s'ils sont divisés en 365 jours par des frais journaliers, mais le site est magnifiquement écrit dans la zone de la Fédération de Russie sans adresses multi-niveaux gratuites inutiles dont vous ne vous souviendrez jamais et que le moteur de recherche ne le fera pas. retour.
L'accord peut être conclu au bureau d'Ekaterinbourg, des consultants polis m'ont suggéré d'utiliser le parking de domaine, mais pour l'instant je vais l'essayer comme galerie.
J'ai également un email qui correspond au nom du site. Très content! J'ai longtemps rêvé d'avoir mon propre site Web, réalisé de mes propres mains, et que les gens puissent le voir !

Grade: 4

Les prix de ce fournisseur sont un peu élevés, je paie environ 200 roubles par mois pour le placement, et uniquement parce que j'ai payé un abonnement annuel, sinon cela aurait été un ordre de grandeur plus élevé. Mais les conditions sont normales, nous avons alloué 10 Go d'espace, Disque SSD, il n'y a pas de limite sur les sites ou les bases de données musculaires, mais au début ils m'ont généralement fait essayer gratuitement pendant 2 semaines pour comprendre de quoi il s'agissait. Ensuite tout s'est bien passé, alors je me suis inscrit, pour l'instant je n'ai aucun regret, sauf que le prix est un peu plus élevé, à en juger objectivement.
La durée de fonctionnement du serveur est proche de l'idéal, les sites eux-mêmes, hébergés sur l'hébergement, s'envolent. Ils ont aussi panneau pratique gestion, il n'y a pas de limites de trafic, le spam est parfaitement filtré dans le courrier. Ils proposent aussi parfois des promotions et des réductions, j'y ai acheté un domaine pour 49 roubles, je dois encore chercher quelque chose comme ça. Mais l’étendre sans modifier le tarif n’est absolument pas rentable. Là, pour 100 Mo, vous devez payer 30 roubles par mois, donc pour de très grosses ressources, ce n'est pas un fait que cela conviendra. En général, la politique des prix est la seule chose point faible, mais avec la technologie, tout va bien.

Grade: 5

J'ai utilisé cet hébergement 3 fois. La première fois que j'ai décidé de l'essayer, j'ai choisi tarif bon marché, a chargé le site avec 800 visiteurs par jour. Travaux. Ensuite, j'ai voulu me développer en utilisant le même tarif bon marché, mais j'ai rencontré des restrictions et le support technique m'a conseillé de modifier le tarif.
En conséquence, je me suis retrouvé avec un seul site Web, bon marché. Le contrat a pris fin, le site a été déplacé, mais un an plus tard, il est revenu. J'ai accepté le tarif proposé, il avait alors été élargi et j'ai aimé les conditions.
J'ai transféré 3 sites avec à peu près la même charge, et il y a eu une bonne économie en termes d'argent. Après la fin du contrat, pendant un certain temps j'ai tout ramené sur un seul site, il y a un an j'ai repris le deuxième tarif, installé 4 sites, le trafic total est de 3000 hôtes par jour.
Avantages :
1. Stabilité (parfois des sites disparaissent, mais pas pour longtemps). La disponibilité est tout à fait tolérable.
2. Il n'y a aucun problème ou bizarrerie dans les paramètres du logiciel. Vous transférez le site, effectuez une configuration minimale et tout fonctionne.
3. Aucun problème de support.
Inconvénients :
1. Limites des tarifs d'hébergement virtuel. Ils suggèrent gentiment qu'avec une charge constante, vous devez vivre sur un VPS. Mais presque tous les hébergeurs ont cette politique.

Expert en hébergement (3 ans d'expérience) La spécialisation principale consiste à compiler des avis sur les fournisseurs d'hébergement, à établir des évaluations et à effectuer des études marketing sur le marché de l'hébergement. Une personne très minutieuse qui teste scrupuleusement chaque service d'hébergement.

Première impression

Le site Web semble assez convivial, même si la description des plans n’est pas complète. Par exemple, il n'existe pas de liste des systèmes d'exploitation disponibles pour les VPS et les serveurs dédiés. Il n'y a également aucune information sur le système de sauvegarde. De plus, le site Web n’a qu’une version russe, pas de version anglaise.

Les packages d'hébergement partagé sont divisés en Basic et Enterprise. Ils ne sont pas très différents les uns des autres, même si les packages Entreprise sont beaucoup plus chers et doivent être hébergés sur un serveur séparé. Cependant, la configuration de ce serveur n'est pas spécifiée, il est donc difficile de juger à quel point les packages Enterprise sont meilleurs que les packages Basic. Tarifs Forfaits de base l'hébergement partagé varie de 1,79 $/mois à 5,45 $/mois, Corporate - de 11,93 $/mois à 14,92 $/mois. Des fonctionnalités telles que la redirection du nom de domaine, l'antivirus et le scanner de logiciels malveillants sont payantes pour l'hébergement partagé. Et ça fonctions de base, qui sont généralement inclus dans le prix du forfait.

Serveurs VPS petit et peu coûteux. Par exemple, le serveur le plus cher a configurations suivantes: 2 cœurs de processeur, 4 Go de RAM et 60 Go d'espace disque avec disques durs SSD.

Les serveurs dédiés sont plutôt faibles. Les processeurs sont obsolètes et disques durs Disque dur uniquement. On peut donc dire que les prix de ces serveurs sont clairement gonflés : de 44 dollars/mois à 99 dollars/mois.

Période d'essai

La société fournit période d'essai dans les 14 jours pour l'hébergement mutualisé uniquement. Vous pouvez également obtenir un remboursement pour le serveur VPS dans les 10 jours suivant l'achat.

Cycle de facturation

Un serveur dédié peut être acheté pour 1, 2, 3, 6 ou 12 mois. Tous les autres types d'hébergement peuvent être achetés pour un mois ou un an.

Panneau de contrôle

Majordomo fournit le panneau propre développement pour tous les forfaits d'hébergement mutualisé. Il semble aussi convivial que cPanel ou Plesk. Vous pouvez installer n'importe quel panneau de contrôle sur un VPS ou un serveur dédié autogéré. ISPmanager est installé sur le serveur VPS géré.

Limites

Pour VPS et serveurs dédiés restrictions standards espace disque, nombre de cœurs de processeur et quantité de RAM. Tous les forfaits Basic, à l'exception de Start, disposent d'un nombre illimité de domaines et de bases de données, et espace disque varie de 5 Go à 15 Go. U Forfaits corporatifs le nombre de domaines est limité de 1 à 3 et l'espace disque est limité de 10 Go à 15 Go.

Sécurité

La société offre une protection contre les attaques DDoS et le spam pour tous les plans d'hébergement partagé. L'antivirus et le scanner de logiciels malveillants sont payants, respectivement 0,73 $/mois et 1,48 $/mois pour un domaine. Assurer la sécurité et produire sauvegarde Vous devez créer vous-même des fichiers pour les serveurs dédiés et VPS.

Système d'exploitation

Ubuntu est installé sur les serveurs d'hébergement virtuel. Vous pouvez installer CentOS, Debian ou Ubuntu sur un serveur VPS sans administration, et uniquement Debian sur un serveur VPS avec administration. Vous pouvez installer n'importe quelle distribution Linux sur un serveur dédié.

Soutien

La société fournit une assistance par ticket 24h/24 et 7j/7. Ils répondent au point et pas pour longtemps, environ une fois toutes les 2 heures. Majordomo propose également des serveurs VPS avec administration. Ils sont plus chers, mais l'équipe de support technique pourra vous aider pour toute question ou problème lié à la gestion et à la configuration du serveur. La base de connaissances est complète et couvre tous les sujets nécessaires.

Conclusion

D’une part, l’hébergement mutualisé est assez bon marché, même si les fonctions de base sont payantes. De plus, les prix des serveurs dédiés sont trop élevés, car l'équipement est obsolète et la qualité n'est pas à la hauteur du prix. De l'autre côté, Hébergement VPS Pas mal dans l’ensemble – tant en prix qu’en caractéristiques. En principe, nous pouvons dire que cela vaut la peine d'essayer l'hébergement VPS de cette société.

L'examen d'aujourd'hui se concentrera sur le fournisseur d'hébergement Majordomo. Nous allons essayer de le comprendre objectivement caractéristiques clés, avantages et inconvénients. Après tout, il n’existe pas d’hébergement parfait. Ou est-ce que ça arrive encore ?

À propos de Majordomo

À propos de l'hébergement mutualisé de Majordomo

Étant donné que l'hébergement partagé est le plus populaire et service de masse de n'importe quel fournisseur - parlons-en plus en détail. Que peut nous offrir Majordomo ?

Le coût de l'hébergement virtuel de Majordomo varie de 99 à 749 roubles par mois ( lorsqu'il est payé annuellement).


En même temps, en regardant l'image ci-dessus, vous comprendrez vite que l'hébergement virtuel « illimité » n'est disponible que sur les tarifs « Illimité » et « Illimité+ », et sur le tarif « Start » le moins cher, certaines restrictions sont toujours présentes. Cependant, pour la plupart des webmasters novices et des utilisateurs d’hébergement mutualisé, ils seront tout à fait acceptables.

De jolis bonus du fournisseur d'hébergement Majordomo

Avant d'énumérer les agréables « goodies » offerts aux utilisateurs de l'hébergeur Majordomo, il convient de mentionner que certains d'entre eux ne sont pas disponibles sur le tarif « Start ».

Alors, à propos des bonus :

  • Avec un paiement unique pour trois mois de service sur les plans tarifaires « Illimité » ou « Illimité + », tout utilisateur Majordomo reçoit un domaine gratuit dans la zone .ru ou .рф (au choix).
  • Courrier gratuit pour un domaine de « Mail.ru for business ».
  • Installation automatique de systèmes CMS populaires tels que WordPress et Joomla ( sur les tarifs « Illimité » ou « Illimité + »).
  • Certificat SSL gratuit.
  • Fournir Code promo Google AdWords d'un montant de 2 000 roubles (sur tous les tarifs).
  • Transfert de site Web gratuit depuis un autre fournisseur plus trois mois d'hébergement en cadeau ( ne s'applique pas au plan tarifaire « Start »).
  • Plans tarifaires spéciaux entreprise « Business » et « Business + ». Au coût respectivement de 599 et 749 roubles par mois, ils incluent la priorité assistance technique, opérationnel conseils juridiques, aide professionnelle dans la création de sites Web et, surtout, dans l'hébergement sur des serveurs dédiés distincts.


Services et capacités supplémentaires du fournisseur d'hébergement Majordomo

  • Prise en charge du spectre complet Certificats SSL Comodo et la possibilité de les acheter.
  • Possibilité de réaliser un audit SEO complet du site.
  • Assurer la protection du site contre le piratage et traiter les sites contre les virus ( en partenariat avec Revisium).
  • Service complet " Site sous surveillance", qui comprend le traitement rapide d'un site infecté, sa protection contre le piratage informatique par des pirates et des robots, ainsi qu'une surveillance 24 heures sur 24 des menaces Web et un contrôle d'accès. Le service est fourni en partenariat avec Revisium.
  • Possibilité de mise à disposition protection supplémentaire contre les spams et les virus de courrier électronique.
  • Configuration de base ou premium publicité contextuelle dans Yandex.Direct et Google AdWords.

Au lieu d'une conclusion

Pour résumer, si vous recherchez un hébergement, alors Majordomo mérite vraiment toute votre attention. Assurez-vous de profiter du délai de 14 jours test gratuit, car cet hébergement présente de nombreux avantages, et parmi les inconvénients on ne peut noter que quelques limitations présentes dans plan tarifaire"Commencer".



Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :