问题描述
通过接口获取到返回的字符串OutStr:<?xmlversion="1.0"encoding="utf-8"?><Response><Result>0</Result><Message>-1</Message><ArgToken>48374645</ArgToken></Response>
解析时用XmlDocumentdoc=newXmlDocument();doc.LoadXml(OutStr.Trim());调试到doc.LoadXml(OutStr.Trim());已报错。错误内容:根级别上的数据无效。第1行,位置1。想请问问题出在哪里了?
解决方案
解决方案二:
stringxml=@"<?xmlversion=""1.0""encoding=""utf-8""?><Response><Result>0</Result><Message>-1</Message><ArgToken>48374645</ArgToken></Response>";XElementroot=XElement.Parse(xml);vare=root.Element("Result");XmlDocumentdoc=newXmlDocument();doc.LoadXml(xml);
两个都没问题……
解决方案三:
stringxml=@"<?xmlversion=""1.0""encoding=""utf-8""?><Response><Result>0</Result><Message>-1</Message><ArgToken>48374645</ArgToken></Response>";XmlDocumentdoc=newXmlDocument();doc.LoadXml(xml.Trim());XElementroot=XElement.Parse(xml);//异常vare=root.Element("Result");
试着在前面加了个换行,异常了,你加个Trim试下,估计有换行吧
解决方案四:
引用1楼starfd的回复:
stringxml=@"<?xmlversion=""1.0""encoding=""utf-8""?><Response><Result>0</Result><Message>-1</Message><ArgToken>48374645</ArgToken></Response>";XElementroot=XElement.Parse(xml);vare=root.Element("Result");XmlDocumentdoc=newXmlDocument();doc.LoadXml(xml);两个都没问题……
返回的内容直接复制写进字符串里,就可以解析。。可是直接用返回的却不能解析,为什么么?
解决方案五:
引用2楼starfd的回复:
stringxml=@"<?xmlversion=""1.0""encoding=""utf-8""?><Response><Result>0</Result><Message>-1</Message><ArgToken>48374645</ArgToken></Response>";XmlDocumentdoc=newXmlDocument();doc.LoadXml(xml.Trim());XElementroot=XElement.Parse(xml);//异常vare=root.Element("Result");试着在前面加了个换行,异常了,你加个Trim试下,估计有换行吧
已经加了trim的程序里这么写的doc.LoadXml(OutStr.Trim());
解决方案六:
xml.Trim('r','n').Replace(System.Environment.NewLine,string.Empty)
看你反正也没系统换行在里面,直接这样狠点的
解决方案七:
LoadXml从字符串读取xml;Load加载xml文件。
解决方案八:
引用3楼ajo413的回复:
返回的内容直接复制写进字符串里,就可以解析。。可是直接用返回的却不能解析,为什么么?
可以写个方法把它显示出来看下或者直接和字符串版对比一下,不过既然字符串可以解析,你就多写个方法转成字符串吗,几行代码就行了
解决方案九:
引用7楼Imcx_的回复:
Quote: 引用3楼ajo413的回复:
返回的内容直接复制写进字符串里,就可以解析。。可是直接用返回的却不能解析,为什么么?可以写个方法把它显示出来看下或者直接和字符串版对比一下,不过既然字符串可以解析,你就多写个方法转成字符串吗,几行代码就行了
要怎么做引用5楼starfd的回复:
xml.Trim('r','n').Replace(System.Environment.NewLine,string.Empty)看你反正也没系统换行在里面,直接这样狠点的
还是不行呢后来调试应该是接口返回的字符串有问题。看起来同样的字符串1.stringOutStr="<Response><Result>0</Result><Message>-1</Message><ArgToken>78108770</ArgToken></Response>2.stringOutStr="<Response><Result>0</Result><Message>-1</Message><ArgToken>78108770</ArgToken></Response>"1是接口返回的字符串,2是拷贝到txt后再考回来的字符串,2可以解析,1解析不了
解决方案十:
再给个绝招,你找?>这个的位置,从这个后面开始截取字符串
解决方案十一:
可以问一下你的用什么方式收到xml吗
解决方案十二:
你先把收到的字符串输出到txt里,看到底是什么,是否多了回车,少了空格之类的
解决方案十三:
stringxml=@"<?xmlversion=""1.0""encoding=""utf-8""?><Response><Result>0</Result><Message>-1</Message><ArgToken>48374645</ArgToken></Response>";xml=xml.Substring(xml.IndexOf('<'));Console.WriteLine(xml);XmlDocumentdoc=newXmlDocument();doc.LoadXml(xml);
这个我用的是你问题里提供的,这样子后是可以了,正则替换居然匹配不到第一个尖括号之前的东西,神了奇了
解决方案十四:
你直接把:<?xmlversion=""1.0""encoding=""utf-8""?>去掉