2017-01-10 5 views
0

Это мой XML-файл. Мне нужно выбрать один тестовый элемент и получить имя всех атрибутов из его дочерних узлов результата.Как получить все имена атрибутов из выбранного узла XML в C#

<?xml version="1.0" encoding="UTF-8"?> 
<summary> 
    <test> 
    <id>test 1</id> 
    <result value="-45">330</result> 
    <result value="0">300</result> 
    <result value="45">340</result> 
    </test> 
    <test> 
    <id>test 3</id>  
    <result value="-45">330</result> 
    <result value="0">300</result> 
    <result value="45">340</result> 
    </test> 
</summary> 

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

XmlDocument xd = new XmlDocument(); 
xd.Load(_xmlFilePath); 

XmlNodeList nodelist = xd.GetElementsByTagName("result"); 

foreach (XmlNode node in nodelist) 
    { 
     string attrVal = node.Attributes["value"].Value; 
     Console.WriteLine(attrVal); 
    } 

Любое предложение приветствуется.

Спасибо.

+0

Может у показать, что, как ожидается, значение ' nodelist' и вывод 'attrVal' –

+0

Выход должен быть -45,0,45 – WEAPI

ответ

2

Вы можете использовать LINQ для Xml с XDocument класса

var doc = XDocument.Load(_xmlFilePath); 

var distinctResults = doc.Descendants("result") 
         .Select(element => element.Attribute("value").Value) 
         .Distinct(); 

foreach(var result in distinctResults) 
{ 
    Console.WriteLine(result); 
} 

Или с использованием HashSet<string>

var results = doc.Descendants("result") 
       .Select(element => element.Attribute("value").Value); 

var distinctResults = new HashSet<string>(results); 

foreach(var result in distinctResults) 
{ 
    Console.WriteLine(result); 
} 
+0

«System.Xml.XmlDocument» не содержит определения для «Descendants» и не используется метод расширения «Descendants», принимающий первый аргумент типа «System.Xml.XmlDocument». – WEAPI

+0

Используйте [XDocument] (https: // msdn.microsoft.com/en-us/library/system.xml.linq.xdocument(v=vs.110).aspx) вместо "XmlDocument" – Fabio

0

Попробуйте следующее:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication34 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 

      XDocument doc = XDocument.Load(FILENAME); 

      string id = "test 1"; 

      var results = doc.Descendants("test").Where(x => (string)x.Element("id") == id).FirstOrDefault().Elements("result").Select(x => new 
      { 
       angle = (int)x.Attribute("value"), 
       length = (int)x 
      }).ToList(); 

     } 


    } 


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