2016-01-13 4 views
0

У меня есть несколько файлов XML, которые выглядят, как показано нижеПолучение значений из 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 я думаю, что в пар ключ-значение. Я хочу извлечь эти значения и сохранить их в таблице базы данных (SQL Server 2012) с именем (например, sp_year) в качестве имени столбца и значения (например, 2015) в качестве значения столбца с использованием ASP.NET C#. Я думаю, что я могу загрузить файл и читать его следующим образом:

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

Но тот довольно много его (К сожалению Im новичок). Пожалуйста, направляйте меня. Благодаря

ответ

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); 
    } 

метод Elements возвращает все элементы внутри элемента схемы.

Однако я предлагаю изменение файла 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 и читать из владение.У можно использовать следующий метод для чтения из 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) 
       { 
        . 
        . 
        . 
       } 

в цикле Еогеасп вы можете получить ваши требуемые значения, например sp_year

1

ответ ниже показано, как создать XmlDocument от него. Я бы предложил использовать его как пользовательский класс, если вы знаете, изменилась ли схема Xml. Прежде всего, вы должны создать класс POCO, соответствующий схеме XML-файла, используя XmlAnnotations. Во-вторых: Имея путь к файлу:

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-To-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(); 
Смежные вопросы