0

我有,XMLDocument并且我将我想要使用的以下 xml 标记提取xmlDocument.SelectSingleNode("./tag")到一个字符串中,并且我想将它加载到一个 DataTable 中。

我尝试使用,dataTable.ReadXML();但此函数的重载不允许字符串参数。

有没有更好的方法来做到这一点?

编辑:添加代码

XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(string_With_Xml);
DataTable accessTable = new DataTable();
accessTable.ReadXml();

我希望这为这个问题增加了更多的背景。

4

3 回答 3

4

您可以尝试以下方法:

//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];
于 2012-09-11T11:48:25.037 回答
0

你可以这样写扩展:

public static someType ReadXml(this DataTable dt, string yourParam1, string yourParam2)
{
   method body....
}
于 2012-09-11T11:51:55.263 回答
0

您可以执行以下方法,可以使用例如为字符串加载此处的字节数组:

Encoding.UTF8.GetBytes(somestring)

加载数据表的辅助方法,注意回退到 DataSet 的方法 ReadXml 而不是 Datatable ReadXml。如果您的 xml 以某种方式包含多个数据表,这并不总是合适的,因为此方法总是返回 catch 中的第一个数据表:

   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;
            }
        }
    }
于 2021-04-13T12:59:12.713 回答