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

时间:2015-03-20 18:37:15

标签: c# xml datatable

我试图使用IMAPX从附件中获取xml字符串,然后将数据保存到byte []。转换后,该字符串包含由\ r \ n。

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

字符串似乎有" \ r \ n"打破而不是空白和新行

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

当我尝试使用字符串阅读器读取Xml时读取Xml

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

程序似乎无法理解这种格式的代码。我试图在Xml中应用换行符而不是\ r \ n,比如使用& #xA;相反,但没有任何成功。 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,即使它被替换为空格。

3 个答案:

答案 0 :(得分:1)

你不能将任何xml转移到datatable中,你的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解析为schema并转换为datatable。

how to convert xml to DataTable in C#

答案 1 :(得分:0)

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

你必须做这样的事情:

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

答案 2 :(得分:0)

我已设法从字符串创建数据表,但

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

诀窍是使用数据模式提供DataTable

Data.ReadXmlSchema("yourschema.xsd");

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