将 xml 从字符串 c# 转换为数据表?

converting xml to a datatable from a string c#?

我正在尝试使用 IMAPX 从附件中获取 xml 字符串,稍后将数据保存到 byte[]。转换后,字符串具有由 \r\n.

表示的换行符
byte[] att = w.FileData;
str = System.Text.Encoding.Default.GetString(att);

字符串似乎有“\r\n”而不是白色space和换行

str = str.Replace("\r\n", " ");

当我尝试使用字符串 reader 读取 Xml 来读取 Xml

StringReader sr = new StringReader("your xml");
DataSet ds = new DataSet();
ds.ReadXml(sr);

程序似乎无法理解这种格式的代码。我尝试在 Xml 中应用换行符,而不是像使用 ; 那样在 \r\n 中应用换行符相反,但没有任何成功。 Xml 工作正常并转换为数据表,如果它是从系统上的文件检索的,但我希望能够直接从字符串创建数据表

原版xml:

<?xml version="1.0" standalone="yes"?>

     <Data>
           <ID>931304</ID>
           <Age>26</Age>

     </Data>
     <Data>
           <ID>932160</ID>
           <Age>26</Age>
     </Data>
 <Data />

把byte[] att读成字符串就变成这样了

<?xml version="1.0" standalone="yes"?> \r\n <DocumentElement> \r\n  <Data>     \r\n <ID>931304</ID>  \r\n  <Age>26</Age>   \r\n      </Data> \r\n   <Data> \r\n               <ID>932160</ID>     \r\n          <Age>26</Age>     \r\n    </Data> \r\n     <Data /> \r\n </DocumentElement>

ds.ReadXml(sr);

不识别\r\n,即使它被替换为空白space。

DataSet.ReadXml 方法接受 文件名 作为字符串 (Documentation)。您不能将 xml 本身作为字符串传递。您必须将字符串转换为流才能执行此操作。

你必须这样做:

    StringReader sr = new StringReader("your xml");
    DataSet ds = new DataSet();
    ds.ReadXml(sr);

您无法将任何 xml 传输到数据表中,您的 xml 转换错误。

<?xml version="1.0" standalone="yes"?> <-- why "?" this at the start and end.
...<Data /> at the end

要么你删除第一行和最后一行,这是有效的xml,然后它转换成数据表

您可以对这种类型的数据使用 linq。

Loading XML String into datatable

您可以使用 loadxml 方法,然后像

一样对每个节点进行循环

Finding header value in xml

How to display DataTable XML from WriteXml in a nicely readable format?

已更新 或者您可以为此使用模式。

首先创建一个架构 - (How to convert complex XML to .NET Class?)

然后只需将 xml 解析为模式并转换为数据表。

how to convert xml to DataTable in C#

我已经设法从字符串创建数据table,尽管

无法读取它
StringReader sreader = new StringReader(string);
DataTable.ReadXml(sreader);

诀窍是将您的数据架构提供给 DataTable

Data.ReadXmlSchema("yourschema.xsd");

没有在程序中构造table,然后使用 StringReader() 在 ReadXml() 中提供数据,如上所述;