2015-08-21 4 views
0

У меня есть эта XElement:Как получить tablerow из xelement?

<adress name="company1" street="street1" City="city1" <branch key="1" value="branch1" /><language key="1" value="langauge1" /> </adress> 

, как вы видите, есть несколько атрибутов в элементе адрес и он наследует ветвь и язык, который также содержащий некоторые атрибуты элементов.

Я хочу таблицу, как это:

name street city branchvalue branchkey languagevalue languagekey 

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

+0

Пытались ли вы что-нибудь? А также, почему у вас есть C# и vb.net в ваших тегах. –

+0

На данный момент я создаю таблицу, жестко кодирую колонки и помещаю каждый элемент element.attribute в свой столбец. Может быть, мой вопрос расплывчато. Я хотел бы знать, существует ли в рамках пути, чтобы делать то, что я хочу. – steve

+0

else Мне нужно сделать усилие и написать свой собственный метод. – steve

ответ

0

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

string strElem = "<adress name=\"company1\" street=\"street1\" City=\"city1\"><branch key=\"1\" value=\"branch1\" /><language key=\"1\" value=\"langauge1\" /> </adress>"; 
    XElement xel = XElement.Parse(strElem); 

    var branch = xel.Element("branch"); 
    var lang = xel.Element("language"); 

    var theTable = new { 
     name = xel.Attribute("name").Value, 
     street = xel.Attribute("street").Value, 
     city = xel.Attribute("City").Value, 
     branchkey = branch.Attribute("key").Value, 
     branchvalue = branch.Attribute("value").Value, 
     languagevalue = lang.Attribute("key").Value, 
     languagekey = lang.Attribute("value").Value 
     }; 

Update

В свете новых данных .. Я все еще не уверен, что это соответствует вашим потребностям, но вы можете динамически создавать словарь. Оттуда вы можете делать все, что вы хотите с данными:

  string strElem = "<adress name=\"company1\" street=\"street1\" City=\"city1\"><branch key=\"1\" value=\"branch1\" /><language key=\"1\" value=\"langauge1\" /> </adress>"; 
      XElement xel = XElement.Parse(strElem); 

      var theTable = new ExpandoObject() as IDictionary<string, Object>; 
      foreach (XAttribute attr in xel.Attributes()) 
      { 
       theTable.Add(attr.Name.LocalName, attr.Value); 
      } 

      foreach (XElement el in xel.Elements()) 
      { 
       foreach (XAttribute attr in el.Attributes()) 
       { 
        theTable.Add(el.Name + attr.Name.LocalName, attr.Value); 
       } 
      } 

enter image description here

+0

Это то, что я обнаружил как hardcoded и то, что у меня уже есть. Я хочу динамический подход, в котором имена атрибутов могут измениться. – steve

 Смежные вопросы

  • Нет связанных вопросов^_^