XDocument System.UriFormatException:'无效的 URI:Uri 字符串太长
Posted
技术标签:
【中文标题】XDocument System.UriFormatException:\'无效的 URI:Uri 字符串太长【英文标题】:XDocument System.UriFormatException: 'Invalid URI: The Uri string is too longXDocument System.UriFormatException:'无效的 URI:Uri 字符串太长 【发布时间】:2021-11-28 04:29:31 【问题描述】:我正在尝试读取soapmessage 中的XML。 XML 是 23822 行。
发生System.UriFormatException: 'Invalid URI: The Uri string is too long.'
异常。
下面是读取 XML 响应的代码:
XDocument xdoc = XDocument.Load(soapmessage);
var ids = xdoc.Element("FourMonthsAhead1Result")
.Elements("PlantForecastIntervals")
.Elements("<PlantForecastIntervalNode>")
.Select(item => item.Element("IntervalStartTime").Value);
Console.WriteLine(ids);
下面是 XML 响应的小 sn-p:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<s:Body>
<FourMonthsAhead1Response xmlns="http://tempuri.org/">
<FourMonthsAhead1Result xmlns="LSS.solar.webservice">
<PlantDescription xmlns="http://base.datacontract">*PlantName*</PlantDescription>
<PlantForecastIntervalsCount xmlns="http://base.datacontract">2976</PlantForecastIntervalsCount>
<ForecastStartDate xmlns="http://base.datacontract">2021-10-08T13:35:55.912612</ForecastStartDate>
<ForecastEndDate xmlns="http://base.datacontract">2021-10-08T13:35:55.9126123</ForecastEndDate>
<PlantForecastIntervals xmlns="http://base.datacontract">
<PlantForecastIntervalNode>
<IntervalStartTime>2021-10-01T00:00:00</IntervalStartTime>
<IntervalEndTime>2021-10-01T00:15:00</IntervalEndTime>
<IntervalLength>15</IntervalLength>
<ForecastResultParameter>FourMonthsAhead1</ForecastResultParameter>
<ForecastValue>0</ForecastValue>
<ValueUnit>MW</ValueUnit>
</PlantForecastIntervalNode>
<PlantForecastIntervalNode>
<IntervalStartTime>2021-10-01T00:15:00</IntervalStartTime>
<IntervalEndTime>2021-10-01T00:30:00</IntervalEndTime>
<IntervalLength>15</IntervalLength>
<ForecastResultParameter>FourMonthsAhead1</ForecastResultParameter>
<ForecastValue>0</ForecastValue>
<ValueUnit>MW</ValueUnit>
</PlantForecastIntervalNode>
</PlantForecastIntervals>
</FourMonthsAhead1Result>
</FourMonthsAhead1Response>
</s:Body>
</s:Envelope>
【问题讨论】:
【参考方案1】:使用XDocument.Parse
从内容字符串创建XDocument
,而不是XDocument.Load
,后者通过指定路径或uri从文件创建XDocument
:
XDocument xDoc;
string soap = File.ReadAllText("H:\\soap.xml");
// Parse used to get data from a string
xDoc = XDocument.Parse(soap);
// Load can be used to get data from specified file
xDoc = XDocument.Load("H:\\soap.xml");
// Load attempt from string content will throw you an error
xDoc = XDocument.Load(soap);
【讨论】:
以上是关于XDocument System.UriFormatException:'无效的 URI:Uri 字符串太长的主要内容,如果未能解决你的问题,请参考以下文章