Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中解析XML时出现路径错误中的非法字符#_C#_Xml_Visual Studio 2008 - Fatal编程技术网

C# 在C中解析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

我在使用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,原因是您使用的是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());
            }
        }
    }