You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:40:01