C# 在C中解析XML时出现路径错误中的非法字符#
我在使用XMLTextReader方法时遇到“路径错误中的非法字符”。基本上,我将向tr.im发送一个长URL,tr.im将响应作为XML流发送,我试图对其进行解析,但得到了上面提到的错误。你们能告诉我为什么我会犯这个错误,我哪里会出错吗?代码如下:C# 在C中解析XML时出现路径错误中的非法字符#,c#,xml,visual-studio-2008,C#,Xml,Visual Studio 2008,我在使用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=" + Http
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,原因是您使用的是XmlTextReader的构造函数,它将文件路径作为参数,但您正在传递XML内容 请尝试以下代码
XmlTextReader reader = new XmlTextReader(new StringReader(strURL));
您应该打印或以其他方式显示
strUrl
。一旦您能够真正看到传递给测试读取器的路径,就应该清楚路径错误是什么
另外,只要看一下代码,似乎响应本身可能是XML,在这种情况下,您应该将objSReader
直接传递给XmlTextReader构造函数。XmlTextReader(string)
构造函数需要的是文件路径,而不是实际的XML数据
您可以直接从流创建XML读取器。建议使用以下方法执行此操作:
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))
{
}
}
太神了谢谢,您的建议没有导致错误。除非更改接收xml的请求而不是默认的HTML设置,否则将无法工作。将此参数添加到您的请求中:format=XML响应是XML数据,如问题中所述。即使只是传递objSReader,我也会得到错误。获取错误:“System.Xml.XmlReader.Create(string)”是一个“方法”,但与此类似使用“类型”。编辑以去掉“new”,这就是问题所在。我该怎么处理?
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))
{
}
}
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());
}
}
}