У нас есть компания-поставщик, которая требует, чтобы файлы данных 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;
}
}
}
Я не лучший в 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
}
}
}
}
Обратите внимание, что это вернет первый элемент, который соответствует только. Как только он найдет его, он вернет элемент и остановится.
return schemaSection;
илиreturn XSDSection;
,