[英]Loading a DataTable with a XML string
我有XMLDocument
,我使用xmlDocument.SelectSingleNode("./tag")
将我想要的以下 xml 标签提取到一个字符串中,我想将它加载到 DataTable 中。
我尝试使用dataTable.ReadXML();
但此函数的重载不允许字符串参数。
有没有更好的方法来做到这一点?
编辑:添加代码
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(string_With_Xml);
DataTable accessTable = new DataTable();
accessTable.ReadXml();
我希望这为这个问题增加了更多的背景。
您可以尝试以下操作:
//Your xml
string TestSTring = @"<Contacts>
<Node>
<ID>123</ID>
<Name>ABC</Name>
</Node>
<Node>
<ID>124</ID>
<Name>DEF</Name>
</Node>
</Contacts>";
StringReader StringStream = new StringReader(TestSTring);
DataSet ds = new DataSet();
ds.ReadXml(StringStream);
DataTable dt = ds.Tables[0];
你可以这样写扩展:
public static someType ReadXml(this DataTable dt, string yourParam1, string yourParam2)
{
method body....
}
您可以执行以下方法,例如可以为字符串加载此处的字节数组:
Encoding.UTF8.GetBytes(somestring)
加载数据表的辅助方法,注意回退到 DataSet 的方法 ReadXml 而不是 Datatable ReadXml。 如果您的 xml 以某种方式包含多个数据表,这并不总是合适的,因为此方法总是返回捕获中的第一个数据表:
public DataTable Convert(byte[] bytes)
{
var text = bytes.ToStringUtf8();
if (string.IsNullOrWhiteSpace(text))
{
return null;
}
using (var stream = new MemoryStream(bytes))
{
try
{
var dt = new DataTable();
dt.ReadXml(stream);
return dt;
}
catch (InvalidOperationException ie)
{
Trace.WriteLine(ie);
var ds = new DataSet();
stream.Position = 0;
ds.ReadXml(stream);
if (ds.Tables.Count > 0)
{
return ds.Tables[0];
}
return null;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.