Как я могу получить первый элемент после элемента с LINQ-to-XML?

Это получит Вас достаточно близкий, и я использую его в производстве и никогда не имел коллизии. Однако при рассмотрении конструктора для гуида в отражателе Вы будете видеть все проверки, которые он осуществляет.

 public static bool GuidTryParse(string s, out Guid result)
    {
        if (!String.IsNullOrEmpty(s) && guidRegEx.IsMatch(s))
        {
            result = new Guid(s);
            return true;
        }

        result = default(Guid);
        return false;
    }

    static Regex guidRegEx = new Regex("^[A-Fa-f0-9]{32}$|" +
                          "^({|\\()?[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}(}|\\))?$|" +
                          "^({)?[0xA-Fa-f0-9]{3,10}(, {0,1}[0xA-Fa-f0-9]{3,6}){2}, {0,1}({)([0xA-Fa-f0-9]{3,4}, {0,1}){7}[0xA-Fa-f0-9]{3,4}(}})$", RegexOptions.Compiled);
7
задан Edward Tanguay 3 August 2009 в 13:02
поделиться

2 ответа

Вы хотите использовать метод оси Потомки , а затем вызвать метод расширения FirstOrDefault , чтобы получить первый элемент.

Вот простой пример:

using System;
using System.Linq;
using System.Xml.Linq;

class Program
{
    static void Main()
    {
        String xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
            <smartForm idCode=""customersMain"">
                <title>Customers Main222</title>
                <description>Generic customer form.</description>
                <area idCode=""generalData"" title=""General Data"">
                <column>
                    <group>
                    <field idCode=""anrede"">
                        <label>Anrede</label>
                    </field>
                    <field idCode=""firstName"">
                        <label>First Name</label>
                    </field>
                    <field idCode=""lastName"">
                        <label>Last Name</label>
                    </field>
                    </group>
                </column>
                </area>
                <area idCode=""address"" title=""Address"">
                <column>
                    <group>
                    <field idCode=""street"">
                        <label>Street</label>
                    </field>
                    <field idCode=""location"">
                        <label>Location</label>
                    </field>
                    <field idCode=""zipCode"">
                        <label>Zip Code</label>
                    </field>
                    </group>
                </column>
                </area>
            </smartForm>";

        XElement element = XElement.Parse(xml)
            .Descendants()
            .FirstOrDefault();
    }
}
3
ответ дан 7 December 2019 в 03:18
поделиться

Чтобы немного добавить к ответу Эндрю, если вы не знаете, является ли smartForm корневым элементом, но все же хотите, чтобы текст заголовка первой такой записи вы бы использовали:

xml.DescendantsAndSelf("smartForm").Descendants("title").First().Value;

Для этого требуется , чтобы где-то внутри был элемент smartForm с элементом заголовка.

Если вы хотите, чтобы элемент заголовка был непосредственным дочерним элементом в smartForm вы можете использовать:

xml.DescendantsAndSelf("smartForm").Elements("title").First().Value;

Если вас не заботит имя title , и вы просто хотите первый подэлемент, тогда вы должны использовать:

xml.DescendantsAndSelf("smartForm").Elements().First().Value;
6
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: