Как динамически получить все возможные значения атрибутов (переменных атрибутов) одного из узлов xml? - PullRequest
0 голосов
/ 10 августа 2010

Я использую следующую структуру XML

<SERVERS>
<SERVER NAME="A1" ID="1"></SERVER>
<SERVER NAME="A2"></SERVER>
<SERVER NAME="A3" ID="3" Parent="XYZ"></SERVER>
<SERVER NAME="A4" ID="4"></SERVER>
<SERVER NAME="A5" Parent="abc" value="10"></SERVER>
<SERVER NAME="A6"></SERVER>
</SERVERS>

Я получаю доступ к этому XML-файлу с помощью LINQ to XML в asp.net с помощью C #. Я могу получить доступ ко всем атрибутам узла XML, явно указав имя атрибута. Я хочу написать запрос в этот XML-файл, который считывает все значения атрибута узла XML (в нашем примере это узел SERVER) динамически означает, что я хочу написать запрос, который может прочитать значение атрибута Name & ID из первый узел, только имя из второй строки, имя, идентификатор и родитель из третьей строки, имя и идентификатор из четвертой строки, имя, родитель и значение из пятой строки и только имя из шестой строки без изменения существующего кода каждый раз , Когда я добавляю один из атрибутов (например, если я добавляю идентификатор атрибута в шестой строке) в вышеупомянутый xml-файл, мне не нужно изменять мой запрос LINQ to XML. Мой запрос должен динамически извлекать общее количество атрибутов и отображать их значения. Есть ли способ сделать это? Можете ли вы предоставить мне любой код или ссылку, с помощью которой я могу решить вышеуказанную проблему?

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

Приведенный ниже код распечатает все атрибуты элемента.

XDocument doc = XDocument.Load("file.xml");
foreach(var element in doc.Element("SERVER").Elements()) {
  System.Diagnostics.Debug.WriteLine("Node " + element.Name.LocalName + ":");
  foreach(var attribute in element.Attributes()) {
     System.Diagnostics.Debug.WriteLine("  " + attribute.Name.LocalName + ": " + attribute.Value);
  }
}

Для этого XML:

<SERVER>
 <ServerInstance ID="101" Name="Server1">
 <ServerInstance ID="102" Name="Server2">
<SERVER>

Будет напечатано что-то вроде этого:

Node ServerInstance:
  ID: 101
  Name: Server1
Node ServerInstance:
  ID: 102
  Name: Server2
0 голосов
/ 10 августа 2010

Если вы просто используете XElement.Attributes(), вы получите все атрибуты для определенного элемента - вы можете циклически просмотреть их.

Пример кода:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        string xml = "<element attr1='Hello' attr2='there' />";
        XElement element = XElement.Parse(xml);
        foreach (XAttribute attr in element.Attributes())
        {
            Console.WriteLine("{0}={1}", attr.Name, attr.Value);
        }
    }
}

Выход:

attr1=Hello
attr2=there

Так что вам просто нужно пройтись по всем интересующим вас элементам и пройтись по атрибутам внутри каждого элемента, отображая все, что вам нужно.

...