http://en.wikipedia.org/wiki/LibXMLhttp://xmlsoft.org/index.htmlКросплатформенная библиотека для работы с xml файлами изначально написанная для оболочки Gnome.
На данный момент имеет встроенный ftp, http клиент и полный набор для работы не только с XMLем, но и HTMLем, реализовано докучи популярных алгоритмов для работы с xml'eм:
* the XML standard:
http://www.w3.org/TR/REC-xml * Namespaces in XML:
http://www.w3.org/TR/REC-xml-names/ * XML Base:
http://www.w3.org/TR/xmlbase/ * RFC 2396 : Uniform Resource Identifiers
http://www.ietf.org/rfc/rfc2396.txt * XML Path Language (XPath) 1.0:
http://www.w3.org/TR/xpath * HTML4 parser:
http://www.w3.org/TR/html401/ * XML Pointer Language (XPointer) Version 1.0:
http://www.w3.org/TR/xptr * XML Inclusions (XInclude) Version 1.0:
http://www.w3.org/TR/xinclude/ * ISO-8859-x encodings, as well as rfc2044 [UTF-8] and rfc2781 [UTF-16] Unicode encodings, and more if using iconv support
* part of SGML Open Technical Resolution TR9401:1997
* XML Catalogs Working Draft 06 August 2001:
http://www.oasis-open.org/committees/entity/spec-2001-08-06.html * Canonical XML Version 1.0:
http://www.w3.org/TR/xml-c14n and the Exclusive XML Canonicalization CR draft
http://www.w3.org/TR/xml-exc-c14n * Relax NG, ISO/IEC 19757-2:2003,
http://www.oasis-open.org/committees/relax-ng/spec-20011203.html * W3C XML Schemas Part 2: Datatypes REC 02 May 2001
* W3C xml:id Working Draft 7 April 2004
Кстати прекрасно собирается через MinGW, разве что есть некоторые трудности с подключением zlib и iconv, но это решается.
Правда есть и подводные камни, то что отпарсит MSXML - может не отпарсить libxml2, разработчик говорит - придерживается стандартов. В общем возможны проблемы также как и с firefox'ом, там где сайты открываются в IE, могут не открываться в firefox'e. Нарушение стандарта.
Ну и по-умолчанию libxml2 работает с UTF-8, поэтому если собирать без iconv'a, то наши любимые xmlи с encoding="windows-1251" парсится не будут. Если же iconv есть, то xml отпарсится, но результат все-равно вернет в UTF-8 кодировке, т.ч. пугаться не надо.
А перезапись свойства осуществляется так:
- парсится файл
- возвращается указатель на древовидную структуру xml дерева
- проходим по дереву в поиске нужной нам ветки (ноды)
- передаем в метод xmlSetProp(нашу_ноду,имя_свойства,значение_свойства);
- сохраняем дерево в файл, если имя совпадает, то файл меняется, если нет, то создается новый.