使用XMLTextReader方法时,我收到“路径错误中的非法字符”。基本上,我正在向tr.im发送一个长URL,并且tr.im将响应作为XML流发送,我正在尝试解析但是我得到了上面提到的错误。你能指导我为什么我会收到这个错误以及我哪里出错了?这是代码:
WebRequest wrURL;
Stream objStream;
string strURL;
wrURL = WebRequest.Create("http://api.tr.im/api/trim_url.xml?url=" + HttpUtility.UrlEncode(txtURL.Text));
objStream = wrURL.GetResponse().GetResponseStream();
StreamReader objSReader = new StreamReader(objStream);
strURL = objSReader.ReadToEnd().ToString();
XmlTextReader reader = new XmlTextReader(strURL); //getting the error at this point
我正在使用Visual Studio 2008,Express Edition
答案 0 :(得分:71)
你之所以使用XmlTextReader的构造函数,它是以文件路径作为参数,而是传递XML内容。
尝试以下代码
XmlTextReader reader = new XmlTextReader(new StringReader(strURL));
答案 1 :(得分:13)
XmlTextReader构造函数接受一个字符串,该字符串指向存储XML文件的URL。你传递的是XML本身,当然这是一条无效的路径。试试这个:
using (var client = new WebClient())
{
var xml = client.DownloadString("http://api.tr.im/api/trim_url.xml?url=" + HttpUtility.UrlEncode(txtURL.Text));
using (var strReader = new StringReader(xml))
using (var reader = XmlReader.Create(strReader))
{
}
}
答案 2 :(得分:4)
XmlTextReader(string)
构造函数需要文件路径,而不是实际的XML数据。
您可以直接从流中创建XML阅读器。建议的方法是使用XmlReader.Create方法:
XmlReader reader = XmlReader.Create(objStream);
答案 3 :(得分:1)
您应该打印或以其他方式显示strUrl
。一旦你能够真正看到你传递给测试阅读器的路径,那么路径错误应该是显而易见的。
另外,只看代码,似乎响应本身可能是XML,在这种情况下,您应该将objSReader
直接传递给XmlTextReader构造函数。
答案 4 :(得分:1)
private void csv2_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet();
DataSet dsSchema = new DataSet();
dsSchema.ReadXml(@"C:\Working\Teradata\ssis\Sample.xml");
StringReader sreader = new StringReader(ToXml(dsSchema));
ds.ReadXmlSchema(sreader);
ds.ReadXml(@"C:\Working\Teradata\ssis\Sample.xml");
ExportTableToCsvString(ds.Tables["session"], true, @"C:\Working\Teradata\ssis\op\session.csv");
BuildDynamicTable(ds, @"C:\Working\Teradata\ssis\op\");
}
public string ToXml(DataSet ds)
{
using (var memoryStream = new MemoryStream())
{
using
(
TextWriter streamWriter = new StreamWriter(memoryStream))
{
var xmlSerializer = new XmlSerializer(typeof(DataSet));
xmlSerializer.Serialize(streamWriter, ds);
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
}
}
答案 5 :(得分:0)
尝试一下。它正在工作。
XmlDocument xmlDocument = new XmlDocument();
using (var strReader = new StringReader("xml string object here"))
{
using (XmlReader xmlReader = XmlReader.Create(strReader, settings))
{
xmlDocument.Load(xmlReader);
}
}