Обнаженная теория об XML. DarkSergeant Спецвыпуск Xakep, номер #028, стр. 028-056-6 break; } } //если мы дошли до конца элемента, и этот элемент был юзер-программист, //то выведем его имя if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "User" && isProgrammer) Console.WriteLine (userName); } SAX - Простой API (набор функций) для XML SAX еще сложнее использовать (я даже пример писать не буду), чем XmlReader. Слово Simple(простой) в названии данной модели, означает, что это самая простой подход с точки зрения РАЗРАБОТЧИКА БИБЛИОТЕКИ, что совсем не повышает удобство ПОЛЬЗОВАНИЯ библиотеками использующих эту модель. В Sax-е, как и в DOM-е, вся загрузка происходит за один вызов load-а, но если в DOM-е библиотека сама строила дерево, то в SAX-е просто на каждый открывающий тег, текст, закрывающий тег, будет вызываться твоя функция, которую ты должен был перед этим зарегить в библиотечке. Если в XmlRead-е можно самому решать, что, как и когда считывать, то в SAX-е все упирается в жесткие рамки SAX-библиотеки. Но благодаря своей простоте, SAX портирован уже на все платформы, а его библиотека занимает очень мало места, что может быть необходимо на «мелких» системах (КПК, телефоны и т.д.) Запись Xml-документов. Для записи Xml-документов в файл можно использовать DOM и XmlWriter. Первый опять же используется интуитивно, и осваивается за несколько минут. С XmlWriter-ом разбираться надо подольше. Запись файлов через DOM-модель Запись через DOM-модель происходит следующим образом: сначала мы создаем в памяти дерево, которое описывает наш xml-документ, а потом его сохраняем на диск. Для создания новых элементов, атрибутов, текста, используются функции doc.CreateElement, doc.CreateAttribute, doc.CreateText, далее созданные узлы привязывают к родительским элементам через функцию xmlNode.AppendChild и xmlNode.Attributes.Add. В следующем примере мы записываем на диск список юзеров состоящий из одного юзера: //создаем новый XmlDocument XmlDocument doc = new XmlDocument(); //Создаем и добавляем корневой элемент Users XmlNode usersNode = doc.AppendChild(doc.CreateElement ("Users")); //Создаем и добавляем элемент User XmlNode userNode = usersNode.AppendChild(doc.CreateElement ("User")); //Создаем и добавляем к юзеру атрибут id userNode.Attributes.Append(doc.CreateAttribute("id")).InnerText = 0.ToString(); //Создаем и добавляем к юзеру дочерний элемент Name с текстом Вася userNode.AppendChild(doc.CreateElement("Name")).AppendChild(doc.CreateTextNode("Вася")); //сохраняем полученный документ на диск doc.Save("singleUser.xml"); После выполнения данного куска кода, на диске появится xml-файл со следующим содержимым: <Users> <User id="0"> <Name>Вася</Name> </User> </Users> Также через Dom можно не только создавать Xml-файлы с нуля, но и редактировать старые. Так следующий код повышает зарплату программистам на 100 баксов: //создаем новый документ XmlDocument doc = new XmlDocument(); //загружаем в него данные из users.xml doc.Load("users.xml"); //Для каждого узла Зарплата для юзеров, которые являются программистами foreach (XmlNode nameNode in doc.SelectNodes("//User[Role='программист']/Salary")) |