Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #28, МАРТ 2003 г.

Обнаженная теория об 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"))

Назад на стр. 028-056-5  Содержание  Вперед на стр. 028-056-7