2016-01-13 48 views
0

檢索值我有一個看起來像下面從XML文件

<?xml version="1.0" encoding="UTF-8"?> 
<schema> 
<sp_transaction_id name="sp_transaction_id" value="1" /> 
<sp_year name="sp_year" value="2015" /> 
<sp_first_name name="sp_first_name" value="James" /> 
<sp_gender name="sp_gender" value="Male" /> 
<sp_date_of_birth name="sp_date_of_birth" value="06-06-1999" /> 
</schema> 

XML格式,我認爲是在鍵值對多個XML文件。 我想提取這些值並將其存儲到數據庫(SQL Server 2012)表中,使用ASP.NET C#將列名稱和值(例如; 2015)的名稱(例如; sp_year)作爲列值。 我想我可以上傳文件,這樣閱讀:

string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); 
string filePath = Server.MapPath("~/Uploads/") + fileName; 
FileUpload1.SaveAs(filePath); 
string xml = File.ReadAllText(filePath); 

但那差不多了(對不起我是個初學者)。請指導我。由於

回答

1

您可以使用下面的代碼來獲取鍵值對

XDocument doc = XDocument.Load(filePath); 
var schemaElement = doc.Element("schema"); 
foreach (var xElement in schemaElement.Elements()) 
    { 
     Console.WriteLine(xElement.Attribute("name").Value + ":" + xElement.Attribute("value").Value); 
    } 

元素方法返回的架構元素中的所有元素。

不過我建議更改的XML文件格式,如果可能的話

<?xml version="1.0" encoding="UTF-8"?> 
<schema> 
<KeyValuePair name="sp_transaction_id" value="1" /> 
<KeyValuePair name="sp_year" value="2015" /> 
<KeyValuePair name="sp_first_name" value="James" /> 
<KeyValuePair name="sp_gender" value="Male" /> 
<KeyValuePair name="sp_date_of_birth" value="06-06-1999" /> 
</schema> 
+0

謝謝你的幫助,這個答案幫助我解決我的問題....欣賞它很多 – AkumJamir

1

對於從XML文件中讀取數據,你並不需要上傳it.You可以給XML的路徑和it.You閱讀可以使用下面的方法從XML

public static XmlDocument LoadXmlDocument(string xmlPath) 
    { 
     if ((xmlPath == "") || (xmlPath == null) || (!File.Exists(xmlPath))) 
      return null; 

     StreamReader strreader = new StreamReader(xmlPath); 
     string xmlInnerText = strreader.ReadToEnd(); 
     strreader.Close(); 

     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml(xmlInnerText); 

     return xmlDoc; 
    } 

閱讀對於閱讀從XML數據,可以使用

XmlDocument xmlDoc = LoadXmlDocument(xmlPath); 

XmlNodeList nodes = xmlDoc .SelectNodes("//*"); 

       foreach (XmlElement node in nodes) 
       { 
        . 
        . 
        . 
       } 

在foreach循環中,你可以得到你需要的值如sp_year

1

下面的回答顯示瞭如何從它創建一個XmlDocument。 如果您知道Xml架構是否更改,我會建議將其用作用戶定義的類。 首先,您應該使用XmlAnnotations創建適合Xml文件架構的POCO類。 其次: 具有該文件的路徑:

XmlSerializer serializer = new XmlSerializer(typeof(definedclass)); 
using (FileStream fs = File.Open(pathtofile)) 
using (XmlReader reader = XmlReader.Create(fs)) 
{ 
    var xmlObject = serializer.Deserialize(reader); 
} 

現在的XMLObject是從XML值的用戶定義的類。 問候, 拉法爾

1

您可以將文件加載到一個XDocument &然後使用LINQ到XML中提取所需的信息。示例代碼下面加載所有名稱/值對成類的數組:

class MyXMLClass 
{ 
    public String FieldName { get; set; } 
    public String Value { get; set; } 
} 

的代碼獲得所有「模式」的後代(只有一個,因爲它是頂級元素),然後選擇內部的&所有元素爲每個提取名稱創建一個新的類對象&值。

XDocument xd = XDocument.Load("test.xml"); 
    MyXMLClass[] xe = 
    xd.Descendants("schema") 
     .Elements() 
     .Select(n => new MyXMLClass {FieldName = n.Attribute("name").Value, Value = n.Attribute("value").Value}) 
     .ToArray();