读取XML时触发“路径含非法字符”错误的技术求助
解决XDocument.Load加载XML字符串报错“Illegal characters in path”的问题
问题根源
XDocument.Load(string)方法的参数是文件路径字符串,并非XML内容字符串。你把服务器返回的XML内容直接传入该方法,程序会将整个XML文本当作文件路径解析,因此触发“路径中有非法字符”的错误。添加@符号或转义引号无法解决问题,因为核心矛盾不是字符串转义错误。
正确解决方法
要加载XML字符串,需使用XDocument.Parse(string)方法;也可以直接从响应流加载XML,跳过字符串转换步骤,效率更高。
方法1:用XDocument.Parse解析XML字符串
修改代码中加载XML的逻辑:
using (StreamReader streamReader = new StreamReader(response.GetResponseStream())) { string ResponseFromServer = streamReader.ReadToEnd(); // 将Load替换为Parse XDocument doc = XDocument.Parse(ResponseFromServer); var query = from c in doc.Descendants("aptitude") select c; // 后续业务代码 }
方法2:直接从响应流加载XML(更高效)
无需将流转换为字符串,直接用XDocument.Load加载响应流:
// 去掉StreamReader转换步骤,直接操作响应流 using (Stream responseStream = response.GetResponseStream()) { XDocument doc = XDocument.Load(responseStream); var query = from c in doc.Descendants("aptitude") select c; // 后续业务代码 }
额外优化建议
- 编码匹配:示例XML声明编码为
ISO-8859-1,接收时可指定对应编码避免乱码:new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("ISO-8859-1")) - 参数安全:POST参数拼接存在注入风险,建议对每个参数做URL编码:
string postdata = $"UserId={HttpUtility.UrlEncode(UserID)}&FirstName={HttpUtility.UrlEncode(FirstName)}&LastName={HttpUtility.UrlEncode(LastName)}&SecondaryAccount={HttpUtility.UrlEncode(Secondary)}&Password={HttpUtility.UrlEncode(AcctPassword)}";
内容的提问来源于stack exchange,提问作者Miranda
相关产品推荐
相关产品推荐

