代码之家  ›  专栏  ›  技术社区  ›  Miranda

读取xml文件时路径错误中有非法字符

  •  1
  • Miranda  · 技术社区  · 1 年前

    我正在尝试读取XML文件的内容。它在加载xml文件的行上抛出错误。
    这是一个xml文件的示例

    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <user userID="1356748"> 
    <name first="Joe" last="Sample" /> 
    <version>MACHVR</version> 
    <aptitude name="Mental Acuity" id="A1">4</aptitude> 
    <aptitude name="Business Terms" id="A2">3</aptitude> 
    <aptitude name="Memory Recall" id="A3">9</aptitude> 
    <aptitude name="Vocabulary" id="A4">4</aptitude> 
    <aptitude name="Numerical Perception" id="A5">3</aptitude> 
    <aptitude name="Mechanical Interest" id="A6">4</aptitude> 
    <aptitude name="Math" id="A7">7</aptitude> 
    </user>
    

    这是我用来阅读它的代码

    public Assessment GetXMLData(string UserId, string Secondary, string FirstName, string LastName, string AcctPassword)
    {
        string URL = "http://www.myurl.com";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
        request.Method = "POST";
        string postdata = "UserId=" + UserID + "&FirstName=" + FirstName +
            "&LastName=" + LastName + "&SecondaryAccount=" + Secondary +
            "&Password=" + AcctPassword;
    
        byte[] byteArray = Encoding.UTF8.GetBytes(postdata);
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = byteArray.Length;
    
        Assessment test = new Assessment();
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
        {
            string ResponseFromServer = streamReader.ReadToEnd();
    
            XDocument doc = XDocument.Load(ResponseFromServer);
            var query = from c in doc.Descendants("aptitude")
                        select c;
                        
            //some more code            
        }
    }
    

    错误正在被抛出 XDocument doc = XDocument.Load(ResponseFromServer)

    我试着加上@符号,结果是

    XDocument doc = XDocument.Load(@ResponseFromServer);

    然后我尝试用它来转义字符串中的引号,并保留@符号

    ResponseFromServer = ResponseFromServer.Replace("\"","\"\"") XDocument-doc=XDocument。加载(@ResponseFromServer);

    我仍然得到错误

    1 回复  |  直到 1 年前
        1
  •  0
  •   Mark Seemann    1 年前

    这个 overload of XDocument.Load that takes a string value 期待 一串 成为a 文件名 .

    从代码示例来看,您似乎已经有了 StreamReader 使用实际的XML 内容 你有没有试着把它当作一个论点?

    var doc = XDocument.Load(streamReader);
    

    如果确实需要读取XML字符串,请使用 XDocument.Parse 而不是加载。