如何解析C#中的XML

问题描述:

我已经设法读取硬盘上保存的.csv文件,并获取数据以弹出数据表。我现在想要将这些数据放入XML格式,然后将XML发送到Web服务。我怎样才能做到这一点?如何解析C#中的XML

谢谢你的时间。

+3

你已经试过了什么?你使用的是什么版本的框架? – 2010-11-16 13:54:40

+0

那么,你想写XML还是读XML? – 2010-11-16 13:55:59

+0

我应该说我正在使用Visual Studio做到这一点,并使用框架4.我不知道如何将数据转换为XML格式。我研究过它,并认为LINQ是做到这一点的方式,但不完全确定? – Ebikeneser 2010-11-16 14:01:08

XLinq非常适合将数据放入XML中。如果你可以使用最新的.NET框架,我强烈推荐它。

有一些信息上手这里(例如) http://www.c-sharpcorner.com/UploadFile/mahesh/xLinkDoc06202007130827PM/xLinkDoc.aspx

至于用于发送XML的Web服务,也许你应该调用通过使用Visual Studio服务引用自动生成客户端的Web服务工具。

您可能会或可能不会需要发送XML到 - 在许多情况下,服务是基于对象的

(即你不需要XLINQ,只要你能解析CSV到正确的对象。) /编辑:

使用WCF调用web服务粗糙例如:

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

感谢您的答复,就我已经到位的方面而言 - 我已经使用过服务参考工具,我已经创建了一个web服务的web引用,这个引用已经存在,并创建了一个客户端应用程序来使用服务。我正在处理一家公司向我发送了一些文件,如终端,.wsdl和.xsd文件。我将以csv的形式获取他们的数据。所以我更喜欢这样的印象,我必须将数据解析到xml模板中,然后使用soap发送它。你认为做这件事的最好方法是什么?谢谢你的时间。 – Ebikeneser 2010-11-16 14:16:37

+0

他们的csv数据是否来自Web服务?如果您使用的是WCF客户端(来自ServiceReference),则不必直接使用SOAP。但是你必须在请求中放入什么取决于它们的实现。许多Web服务调用就像GetObjects(ObjectQuery查询),AddObject(Object对象) – CJBrew 2010-11-16 14:19:26

+0

没有不幸的是,csv文件来自第三方,需要转换成XML,发送到Web服务,所有我必须担心的是越来越来自Web服务的响应,例如该文件已被接受或错误消息。我有一个示例xml发送文件,但不完全确定我将如何使用这在我的客户端应用程序发送? – Ebikeneser 2010-11-16 14:23:21

一种选择是使用WCF(或ASP.NET Web服务,取决于您使用的是哪个.NET版本)连接到Web服务。然后,您可以轻松填充框架为您创建的代理类并调用该服务。

第二个选择是使用XmlTextWriter并使用它在MemoryStream中构建XML文档。一旦你在内存中建立了XML文档,你可以刷新文档并将其发送到Web服务。

第三种选择是使用LINQ to XML即时生成XML文档。根据结构的不同,您使用XmlTextWriter解析CSV文件可能会更容易/更困难。

+1

我强烈建议通过XmlTextWriter使用XLinq,它合成起来要简单得多。 – Guy 2010-11-16 13:58:44

根据您想要的解决方案的强大程度,有多种选择。假设你想要遵循最快的路线,你应该看看XmlWriter。使用XmlWriter,您可以快速生成XML文档,保存为字符串,然后传递给您的Web服务。

我还没有一个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(); 
    } 

编辑:刚才注意到你需要把它传递到Web服务。所以,而不是StreamWriter,使用一个内存流......但同样的想法。

以下代码也可以使用。

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。