加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – XmlDocument.Load多个根元素

发布时间:2020-12-15 20:55:23 所属栏目:百科 来源:网络整理
导读:大家好我在需要加载xml时遇到问题 我的代码就像 Stream.Seek(0,SeekOrigin.Begin);xmlDoc.Load(Stream); //-- throw XmlException (multiple root elements in 14,22)xmlDoc.PreserveWhitespace = true; xml文件是 soapenv:Envelope xmlns:dummy="http://www
大家好我在需要加载xml时遇到问题

我的代码就像

Stream.Seek(0,SeekOrigin.Begin);
xmlDoc.Load(Stream); //--> throw XmlException (multiple root elements in 14,22)
xmlDoc.PreserveWhitespace = true;

xml文件是

<soapenv:Envelope xmlns:dummy="

http://www.somedomian.com/dummybus/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header Id="IDH">
        <dummy:authentication>
            <id>Unique</id>
            <userid>myuser</userid>
        </dummy:authentication>
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsu:Timestamp>
                <wsu:Created>2015-09-07T12:21:15</wsu:Created>
                <wsu:Expires>2015-09-08T12:21:15</wsu:Expires>
            </wsu:Timestamp>
        </wsse:Security>
    </soapenv:Header> <!--- This is line 14 and  > is a column 22--->
    <soapenv:Body>
        <dummy:dummybus>
            <msg>X1</msg>
        </dummy:dummybus>
    </soapenv:Body>
</soapenv:Envelope>

<信封> tag是文件的根,为什么发送此错误以及如何读取我的文件?

我找到了有趣的东西

当我保存文件时,而不是将其保存在Stream中,完美加载

xmlDoc.Load(urlToFile);
xmlDoc.PreserveWhitespace = true;

看来这个错误只发生在Stream中,为什么?

此方法将String中的xml转换为MemoryStream

public class XmlUtil
    {
        public static MemoryStream GenerateStreamFromString(string s)
        {
            MemoryStream stream = new MemoryStream();
            StreamWriter writer = new StreamWriter(stream);
            writer.Write(s);
            writer.Flush();
            stream.Position = 0;
            return stream;
        }

解决方法

因为你是从流中读取的,所以当你调用xmlDoc.Load(Stream)时,我会认为它不在开头.在通话之前你在用流做什么?

如果您的流支持搜索,您可以尝试在呼叫之前回到其开头:

Stream.Seek(0,SeekOrigin.Begin);
xmlDoc.Load(Stream);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读