Как проанализировать строку (LINQ to XML)

В этой статье показано, как проанализировать строку для создания xml-дерева в C# и Visual Basic.

Пример

В следующем коде C# показано, как выполнять синтаксический анализ строки XML.

XElement contacts = XElement.Parse(
    @"<Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone Type=""home"">206-555-0144</Phone>
            <Phone Type=""work"">425-555-0145</Phone>
            <Address>
            <Street1>123 Main St</Street1>
            <City>Mercer Island</City>
            <State>WA</State>
            <Postal>68042</Postal>
            </Address>
            <NetWorth>10</NetWorth>
        </Contact>
        <Contact>
            <Name>Gretchen Rivas</Name>
            <Phone Type=""mobile"">206-555-0163</Phone>
            <Address>
            <Street1>123 Main St</Street1>
            <City>Mercer Island</City>
            <State>WA</State>
            <Postal>68042</Postal>
            </Address>
            <NetWorth>11</NetWorth>
        </Contact>
    </Contacts>");
Console.WriteLine(contacts);

Вы можете проанализировать строку в Visual Basic аналогичным образом. Однако более эффективно использовать XML-литералы, как показано в следующем коде, так как XML-литералы не страдают от одинаковых штрафов производительности, как анализ XML из строки.

Используя XML-литералы, вы можете просто скопировать и вставить XML в программу Visual Basic.

Примечание.

Синтаксический анализ текста или загрузка XML-документа из текстового файла менее эффективны, чем функциональное построение. Если вы инициализируете дерево XML из кода, для использования функциональной конструкции меньше времени процессора, чем для анализа текста.

Dim contacts as XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone Type="home">206-555-0144</Phone>
            <Phone Type="work">425-555-0145</Phone>
            <Address>
            <Street1>123 Main St</Street1>
            <City>Mercer Island</City>
            <State>WA</State>
            <Postal>68042</Postal>
            </Address>
            <NetWorth>10</NetWorth>
        </Contact>
        <Contact>
            <Name>Gretchen Rivas</Name>
            <Phone Type="mobile">206-555-0163</Phone>
            <Address>
            <Street1>123 Main St</Street1>
            <City>Mercer Island</City>
            <State>WA</State>
            <Postal>68042</Postal>
            </Address>
            <NetWorth>11</NetWorth>
        </Contact>
    </Contacts>

Корневой узел Contacts содержит два узла Contact. Для доступа к определенным данным в проанализированном XML используйте метод XElement.Elements(), который в этом случае возвращает дочерние элементы корневого узла Contacts. В следующем примере в окне консоли выводится первый узел Contact:

List<XElement> contactNodes = contacts.Elements("Contact").ToList();
Console.WriteLine(contactNodes[0]);
Dim contactNodes As List(Of XElement) = contacts.Elements("Contact").ToList()
Console.WriteLine(contactNodes(0))

См. также