在C#中解析XML时路径错误中的非法字符

时间:2009-09-03 17:07:44

标签: 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=" + 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

6 个答案:

答案 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);
                }
            }