Я занимаюсь разработкой мобильного приложения asp.net. Я использую XML в качестве базы данных. Я запрашиваю XML для доступа к необходимым элементам и атрибутам, используя LINQ to XML в .net. У меня есть следующая часть в моем XML-файле.
<VALVES>
<VALVE NAME="PWV">
<DISPLAY-NAME>
Production Master Valve
</DISPLAY-NAME>
<COMMANDS USE-TEMPLATE="TRUE" TEAMPLATE-NAME="ValveCommands.xml"></COMMANDS>
</VALVE>
<VALVE NAME="PMV" >
<DISPLAY-NAME>
Production Wing Valve
</DISPLAY-NAME>
<COMMANDS USE-TEMPLATE="TRUE" TEAMPLATE-NAME="ValveCommands.xml"></COMMANDS>
</VALVE>
</VALVES>
В приведенном выше XML-файле я могу получить динамический доступ к дочернему узлу элемента «VALVE» и его атрибуту «NAME» без явного указания имени атрибута с помощью следующего кода. Таким образом, при добавлении любого нового атрибута в дочерний узел 'VALVE' я могу получить к нему доступ без изменения моего существующего кода. Для такой логики я использую следующий код. В следующем коде ValvesProperties является Hashtable, который определен в классе 'Valves'.
static int count = 0;
List<Valves> LstValves = new List<Valves>();
string AttName = null;
string AttValue = null;
XDocument FieldDef = XDocument.Load(@"F:\Shailesh from user OPC\XML\KK3.xml");
XElement FieldRoot = FieldDef.Element("KK");
count = FieldRoot.Element("FIELD-DEFINITION").Element("VALVES").Elements("VALVE").Count();
Valves[] Valveobj = new Valves[count];
count = 0;
foreach (var element in FieldRoot.Element("FIELD-DEFINITION").Element("VALVES").Elements())
{
Valveobj[count] = new Valves();
foreach (var attribute in element.Attributes())
{
AttName = attribute.Name.ToString();
AttValue = attribute.Value.ToString();
Valveobj[count].ValvesProperties.Add(AttName, AttValue);
LstValves.Add(Valveobj[count]);
}
count++;
}
return LstValves;
Аналогичная логика, которая мне нужна для определенной выше части XML. В приведенном выше XML-документе я хочу написать запрос LINQ to XML, который может получить доступ к атрибуту NAME узла 'VALVE' (<VALVE NAME="PWV">
), затем он должен получить доступ к тексту между DISPLAY-NODE (<DISPLAY-NAME> Production Master Valve </DISPLAY-NAME>
) и затем он должен динамически обращаться ко всем атрибутам узла 'COMMAND' (<COMMANDS USE-TEMPLATE="TRUE" TEAMPLATE-NAME="ValveCommands.xml"></COMMANDS>
). Все это мне нужно динамически, без явного указания имени дочернего узла, а также имени их атрибутов (аналогично тому, как я написал вышеупомянутый запрос). Можем ли мы написать такой код, используя LINQ to XML? Будет лучше, если мы сможем написать код для вышеуказанной проблемы в одной логике (аналогично тому, как я написал вышеупомянутый запрос). Можете ли вы предоставить мне любой код или ссылку, по которой я могу решить вышеуказанную проблему?