Чтение определенного элемента XML

1

У нас есть компания-поставщик, которая требует, чтобы файлы данных xml имели определенный макет. Структура определена в XSD файле, и структура может быть обновлена (элементы могут быть перегруппированы или удалены) каждый месяц (новый XSD файл отправляется).

Однако у меня есть XML файл, мне нужно, чтобы элементы были выложены в том же порядке, что и требования XSD. Ниже приведен код, который может читать XML файл. Основываясь на моем сообщении, я могу пропустить XSD файл.

Моя проблема в том, что я не могу вернуть определенный элемент из xml файла. Как я могу это сделать?

        foreach (var XSDsection in sections)
        {
            //Get Section Element;
            string SchemaSchedule = XSDsection.Attribute("name").Value;
            var SchemaSectionSchedule = XSDsection.Element(prefix + "complexType")
                                .Element(prefix + "sequence")
                                .Elements(prefix + "element");
            foreach (var schemaSection in SchemaSectionSchedule)
            {
                //Get child element;
                string schemaElement = schemaSection.Attribute("name").Value;
                var XMLsectionSchedule = xDoc.Descendants(SchemaSchedule);

                foreach (XElement element in xDoc.Element(SchemaSchedule).Descendants())
                {
                    string value = element.Value;       //returns value of next element;
                    string el = element.ToString();     //returns the next element and value from xml file;
                }
            }
        }
Теги:
xsd

1 ответ

0

Я не лучший в XML, но думаю, что вы можете сделать что-то вроде этого:

    foreach (var XSDsection in sections)
    {
        //Get Section Element;
        string SchemaSchedule = XSDsection.Attribute("name").Value;
        var SchemaSectionSchedule = XSDsection.Element(prefix + "complexType")
                            .Element(prefix + "sequence")
                            .Elements(prefix + "element");
        foreach (var schemaSection in SchemaSectionSchedule)
        {
            //Get child element;
            string schemaElement = schemaSection.Attribute("name").Value;
            var XMLsectionSchedule = xDoc.Descendants(SchemaSchedule);

            foreach (XElement element in xDoc.Element(SchemaSchedule).Descendants())
            {
                string value = element.Value;       //returns value of next element;
                string el = element.ToString();     //returns the next element and value from xml file;
                if(value == myDesiredValue)
                {
                    return element; // if you want the element, return it
                }
            }
        }
    }

Обратите внимание, что это вернет первый элемент, который соответствует только. Как только он найдет его, он вернет элемент и остановится.

  • 0
    Благодарю. Я это попробую. Каждый элемент будет встречаться в файле данных только один раз.
  • 0
    Вы также можете вернуть другие элементы в родительские циклы, такие как return schemaSection; или return XSDSection; ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню