2015-09-16 3 views
1

У меня есть XML-файл, который заполняется значениями, которые выглядят как:Получение значений из XML

<property name ="Web Application" value="\Fxnet2\Web\webpl\" /> 
<property name="Web Service" value="\FXnet2\Web\FXnet_SC_WS\" /> 

Для каждой строки я хотел бы импортировать имя в одну строку (назовем ее SERVICENAME) и значение в другом (назовем его servicePath)

Я получил около 250 строк сортировки в xml, возможно ли это сделать в текущем формате XML? и если он это делает? , или мне нужно изменить формат моего списка?

Заранее спасибо.

+3

Да, это очень просто сделать это в текущем формате XML. Я бы предложил использовать LINQ to XML - вы могли бы легко преобразовать документ в эту форму в список пар имя/значение. Я предлагаю вам попробовать, а затем изменить свой вопрос, как только вы столкнетесь с реальной проблемой. –

+0

Другой возможностью было бы создать тип данных 'property' и десериализовать файл в массив' property', а затем получить доступ к данным в коде. – Codor

+0

Я думал о создании класса с именем project, который содержит переменные, чтобы содержать имя и значение, и создавать новый объект для каждой строки, извините, если мои вопросы выглядят глупо, i'm новичок в программировании на C# –

ответ

0

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

XmlDocument doc = new XmlDocument(); 
doc.Load("yourfile.xml"); 
XmlNodeList usernodes = doc.SelectNodes("//property"); 

//Declare arrays 
List<string> serviceName = new List<string>(); 
List<string> servicePath = new List<string>(); 

//iterate through all elements found 
foreach (XmlNode usernode in usernodes) 
{ 
    serviceName.Add(usernode.Attributes["name"].Value); 
    serviceName.Add(usernode.Attributes["value"].Value); 
} 
+0

Этот пример находится на C#, но вы можете легко переносить его на другие языки программирования. –

+0

Wont это просто создать 2 отдельных массива, в которых 1 будет включать в себя все ServiceNames, а другой будет включать servicPaths? Что делать, если я хочу добавить больше переменных? например, создать класс с разными переменными и создать отдельный объект для каждой строки в xml? –

+0

Fox пример, в моем xml каждое значение - это путь, я хочу перейти к этому пути и извлечь список всех DLL-файлов в этом месте, которые я хотел бы вставить в массив, чтобы в будущем я мог сравнивать файлы и т. Д. ..., при использовании вашего кода я получаю массив, заполненный именами проектов и массивом, заполненными путями, но если добавление массива dll 'si получит только массив, заполненный списком DLL первого местоположения. –

0

удалось сделать это в конце концов

static void Main(string[] args) 
     { 
      List<Service> services; 

      using(StreamReader file = File.OpenText("c:\\projects.xml")) 
      { 

       XDocument doc = XDocument.Load(file); 
       services = (from node in doc.Root.Elements("property") 
           select new Service 
           { 
            serviceName = node.Attribute("name").Value, 
            servicePath = node.Attribute("value").Value, 
            dllFiles = System.IO.Directory.GetFiles("servicePath", "*.dll"), 
           }).ToList<Service>(); 

     } 
0

Использование XML Linq

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

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string input = 
       "<Root>" + 
        "<property name =\"Web Application\" value=\"\\Fxnet2\\Web\\webpl\" />" + 
        "<property name=\"Web Service\" value=\"\\FXnet2\\Web\\FXnet_SC_WS\" />" + 
       "</Root>"; 

      XElement root = XElement.Parse(input); 

      var results = root.Descendants("property").Select(x => new { 
       name = x.Attribute("name").Value, 
       value = x.Attribute("value").Value 
      }).ToList(); 

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