從XML

2015-09-16 14 views
1

獲取值我有一個充滿看起來像值的XML文件:從XML

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

對於每一行我想進口的名字爲一個字符串(讓我們稱之爲服務名)和值在另一個(讓我們稱之爲servicePath)

我在xml中得到了約250行的排序,是否有可能以當前的xml格式?如果它如何? ,還是我應該改變我的列表格式?

在此先感謝。

+3

是的,這是很簡單的事,在當前的XML格式。我建議使用LINQ to XML - 您可以輕鬆地將該表單中的文檔轉換爲名稱/值對列表。我建議你嘗試一下,然後在遇到實際問題時編輯你的問題。 –

+0

另一種可能性是創建一個數據類型「property」並將文件反序列化爲一個「property」數組,然後在代碼中訪問數據。 – Codor

+0

我正在考慮創建一個名爲project的類,其中包含變量以包含名稱和值,併爲每一行創建一個新對象,如果我的問題看起來很愚蠢,我很抱歉,我剛剛接觸C#編程 –

回答

0

您可以獲取所有節點並在循環中訪問它們的屬性。在下面的例子中,我將兩個屬性的值添加到2個不同的數組中,以後可以輕鬆操作。

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

不只是創建2個獨立的數組,其中1將包括所有的ServiceNames,另一個將包括servicPaths?如果我想添加更多變量呢?例如創建一個具有不同變量的類,併爲xml中的每一行創建單獨的對象? –

+0

福克斯的例子,在我的xml中,每個值都是一個路徑,我想要去這個路徑,並提取一個列表,這個位置的所有DLL文件,我想插入到一個數組中,所以在將來我可以比較文件等...,當使用你的代碼時,我會得到一個填充了項目名稱和數組的填充路徑的數組,但是如果添加dll數組''只會得到一個填充了第一個位置的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(); 

     } 
    } 
} 
​