Dataset.ReadXML在路径中返回无效字符。为什么?

时间:2010-09-13 17:18:43

标签: c# xml .net-4.0 dataset

我正在使用DataSet方法将字符串读入ReadXML。当我尝试它在路径错误中返回无效字符。如果我保存并在IE中打开字符串作为xml文件,它会在encoding="UTF-16"行引发错误,所以我认为这是问题的原因。

有没有一种简单的方法来解决这个问题?它不应该能够处理unicode或UTF-16吗?

我们非常感谢任何建议。使用C#& .Net 4

<?xml version="1.0" encoding="UTF-8" ?> 
 <iCall xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Rows>
 <Row>
  <Code /> 
  <Title>Test Title</Title> 
  </Row>
  </Rows>
</iCall>

4 个答案:

答案 0 :(得分:17)

DataSet.ReadXml(string)期望文件路径不是 xml文档。因此它尝试将您的xml文档解析为文件路径并失败

如果你只有你的XML运行时,那么你可以这样做:

StringReader sr = new StringReader(xml);
dataSet.ReadXml(sr);

答案 1 :(得分:1)

我认为您可以尝试使用ReadStartElement前进到下一个节点并将整个表读入DataSet。

XmlTextReader r = new XmlTextReader(@"c:\b.xml");
r.MoveToContent();
r.ReadStartElement("iCall");
DataSet ds = new DataSet();
ds.ReadXml(r);
this.dataGrid1.DataSource = ds;

答案 2 :(得分:0)

此示例代码将解决问题。

XmlDocument layoutXml = new XmlDocument();
layoutXml.Load(MyXmlPath); //file location    

StringReader sr = new StringReader(layoutXml.DocumentElement.OuterXml);

ds.ReadXml(sr);

答案 3 :(得分:0)

最好使用额外的行XmlTextReader xtr = ...并将xtr传递给ReadXml方法。

DataSet ds = new DataSet();
StringReader sr = new StringReader(strXml); // or xdoc.InnerXml
XmlTextReader xtr = new XmlTextReader(sr);
ds.ReadXml(xtr);