2010-11-16 4 views
1

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

Спасибо за ваше время.

+3

Что вы уже пробовали? Какую версию рамки вы используете? –

+0

Итак, пытаетесь ли вы писать XML или читать XML? –

+0

Я должен был сказать, что использую Visual Studio для этого и использую фреймворк 4. Я не уверен, как получить данные в формате xml. Я исследовал его и думаю, что LINQ - это способ сделать это, но не совсем уверен? – Ebikeneser

ответ

1

XLinq отлично подходит для размещения данных в XML. Если вы можете использовать обновленную платформу .NET, я настоятельно рекомендую ее.

Там какая-то информация, чтобы начать работу с здесь (например) http://www.c-sharpcorner.com/UploadFile/mahesh/xLinkDoc06202007130827PM/xLinkDoc.aspx

Как для отправки, что XML в веб-службу, возможно, вы должны называть веб-службы с помощью клиента автоматически генерируется с помощью Visual Studio ServiceReference инструмент.

Вы можете или не может понадобиться отправить XML в том, что - во многих случаях услуги на основе объекта

(т.е. вы не должны были бы XLinq, при условии, вы можете разобрать CSV в правильные объекты.)/EDIT:

Грубый пример для вызова веб-сервисов с использованием WCF:

using(var client = new ServiceReference1.ThirdPartyServiceClient()) 
{ 
    client.SendSomething("123", "hello"); 
    string output = client.GetSomething(); 
    Console.WriteLine(output); 
} 
+0

Спасибо за ответ, с точки зрения того, что у меня уже есть - раньше я использовал служебный справочный инструмент, я создал веб-ссылку на веб-сервис, который уже существует, и создал клиентское приложение для использования службы. Я имею дело с компанией, которая отправила мне файлы в realtion для службы, такие как конечные, .wsdl и .xsd-файлы. Я получаю их данные в виде csv. Таким образом, я был уверен, что мне придется анализировать данные и шаблон xml, а затем отправлять его с помощью мыла. Как вы думаете, лучший способ сделать это? Спасибо за ваше время. – Ebikeneser

+0

Имеются ли данные csv из веб-службы? Вы не должны использовать SOAP напрямую, если используете WCF-клиент (из ServiceReference). Но то, что вы должны добавить в запрос, зависит от их реализации. Многие вызовы webservice похожи на GetObjects (ObjectQuery query), AddObject (объект Object) – CJBrew

+0

Нет, к сожалению, файл csv поступает от третьего лица, его нужно преобразовать в xml, отправить в веб-службу, и все, о чем я должен беспокоиться, ответ от веб-службы, например файл был принят и/или сообщение об ошибке. У меня есть пример xml send file, но не совсем уверен, как я буду использовать его в своем клиентском приложении для отправки? – Ebikeneser

2

Одним из вариантов было бы подключение к веб-службе с использованием WCF (или веб-служб ASP.NET, в зависимости от используемой версии .NET). Затем вы можете легко заполнить классы прокси, созданные каркасом для вас, и вызвать службу.

Второй вариант - использовать XmlTextWriter и использовать его для создания XML-документа в MemoryStream. Когда у вас есть документ XML, встроенный в память, вы можете очистить документ и отправить его в веб-службу.

Третий вариант заключается в использовании LINQ to XML для создания документа XML на лету. В зависимости от структуры, которую вы анализируете в CSV-файле, это может быть проще и труднее для вас, чем использование XmlTextWriter.

+1

Я бы настоятельно рекомендовал использовать XLinq над XmlTextWriter, это намного проще в синтаксисе. – Guy

-1

Существуют различные варианты в зависимости от того, насколько надежным является решение, которое вы хотите. Предполагая, что вы хотите следовать по самому быстрому маршруту, вы должны посмотреть на XmlWriter. Используя XmlWriter, вы можете быстро сгенерировать XML-документ, сохранить в строку и затем передать свой веб-сервис.

0

Я не сделал это с DataTable, но отлично подходит для других объектов.

попробовать что-то вроде этого:

 public void writeToXML(DataTable inputData, string fileName) { 
     XmlSerializer xml = new XmlSerializer(typeof(DataTable)); 
     StreamWriter sw = new StreamWriter(fileName); 
     xml.Serialize(sw, inputData); 
     sw.Close(); 
    } 

Edit: Просто заметил, что вам необходимо передать его на веб-службы. Поэтому вместо StreamWriter используйте поток памяти ... но ту же идею.

1

Следующий код также может быть использован.

public static List<Student> convertXMLtoList(string filePath) 
{ 
XDocument doc = XDocument.Load(filePath); 
List<Student> studentsMarks = doc.Descendants("Student").Select(x => new Student() 
{ 
RollNo = int.Parse(x.Element("roll_no").Value), 
Name = x.Element("name").Value, 
}).ToList(); 
return studentsMarks; 
} 

Где XML выглядит

<?xml version="1.0" encoding="utf-8"?> 
<Students> 
    <Student> 
    <roll_no>1</roll_no> 
    <name>XYZ</name> 
</Student> 
... 
</Students> 

Вы можете найти более подробную информацию в http://bit.ly/1eveLz3. вы можете найти CSV для XML также на этом посту.

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