Как читать XML в C# - CodeHelper

Как читать XML в C#

3

Какой способ чтения XML из C# кода является оптимальным?

Новые ответы

Новые Лучшие

1

Если нужно прочитать xml файл большого размера, и не хочется загружать весь этот файл в память, то нужно использовать XmlReader. Этот класс позволяет читать XML в манере близкой к SAX. Итератор пробегает по всем элементам дерева, а пользователю нужно определить как обрабатывать каждый из таких элементов. Пример:

XmlTextReader textReader = new XmlTextReader("file.xml");
while (textReader.Read())
{
    XmlNodeType nType = textReader.NodeType;
    if (nType == XmlNodeType.XmlDeclaration)
    {
        // ...
    }
    if (nType == XmlNodeType.Comment)
    {
        // ...
    }
    if (nType == XmlNodeType.Attribute)
    {
        // ...
    }
    if (nType == XmlNodeType.Element)
    {
        // ...                
    }
    if (nType == XmlNodeType.Entity)
    {
        // ...                
    }
    if (nType == XmlNodeType.Entity)
    {
        // ...                
    }
    if (nType == XmlNodeType.DocumentType)
    {
        // ...                
    }
    if (nType == XmlNodeType.Whitespace)
    {
        // ...                
    }
}
1

Есть интересный способ работы с XML. Нужно создать XSD схему для документа, затем с помощью xsd.exe сгенерировать классы, соответствующие xml-структуре. После этого можно использовать стандартный XmlSerializer для загрузки/сохранения объектов.

2

Классический способ — использовать XmlDocument

Открываем файл:

XmlDocument doc = new XmlDocument();
doc.Load("test.xml");

Выбираем узлы или атрибуты, используя запросы XPath:

// Выбираем единичный узел.
XmlNode node = doc.DocumentElement.SelectSingleNode("/foo/bar");
// Выбираем все узлы по запросу.
XmlNode[] nodes = doc.DocumentElement.SelectNodes("/foo/bar");

Или обращаемся напрямую к классам XmlDocument, XmlNode и тп


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.