代码之家  ›  专栏  ›  技术社区  ›  Sathyajith Bhat ron tornambe

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

  •  32
  • Sathyajith Bhat ron tornambe  · 技术社区  · 15 年前

    我在使用xmltextReader方法时得到一个“路径错误中的非法字符”。基本上,我将向tr.i m发送一个长的URL,而tr.i m将响应作为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速成版

    5 回复  |  直到 12 年前
        1
  •  70
  •   JaredPar    15 年前

    原因是您使用的是xmlTextReader的构造函数,该构造函数以文件路径为参数,但您传递的是XML内容。

    尝试以下代码

    XmlTextReader reader = new XmlTextReader(new StringReader(strURL));
    
        2
  •  12
  •   Darin Dimitrov    15 年前

    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))
        {
    
        }
    }
    
        3
  •  4
  •   JSBÕ±Õ¸Õ£Õ¹    15 年前

    这个 XmlTextReader(string) 构造函数需要一个文件路径,而不是实际的XML数据。

    您可以直接从流创建XML读取器。建议的方法是使用 XmlReader.Create 方法:

    XmlReader reader = XmlReader.Create(objStream);
    
        4
  •  1
  •   JSBÕ±Õ¸Õ£Õ¹    15 年前

    您应该打印或以其他方式显示 strUrl . 一旦您实际看到了要传递给测试阅读器的路径,那么很明显路径错误是什么。

    另外,只要看看代码,就好像响应本身可能是XML,在这种情况下,您应该传递 objSReader 直接到XmlTextReader构造函数。

        5
  •  1
  •   JAY    12 年前
    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());
                }
            }
        }