如何使用ExecuteXmlReader正确输出XML数据

时间:2014-08-28 13:44:49

标签: sql .net xml

我有一个ASP.NET 4.0应用程序,我尝试使用ExecuteXmlReader类中的函数SQLCommand来获取XML结果。查询不会产生任何错误。查询以FOR XML AUTO, ELEMENTS, ROOT('root')结尾。但是当我尝试这个时:

Dim XML As XElement = XElement.Load(query.ExecuteXmlReader)
XML.Save(HttpContext.Current.Server.MapPath("~/Result.xml"))

我收到此错误消息:

XmlReader必须位于Element类型的节点上,而不是None类型的节点。(英文翻译)

Der XmlReader muss sich auf einem Knoten vom Typ' Element' befinden,nicht auf einem Knoten vom Typ' None'。(德语翻译)

奇怪的是,错误发生在XElement.Load(query.ExecuteXmlReader)的行。但代码运行得更远!它还将xml数据保存到磁盘!怎么会发生这种情况?如何在没有错误的情况下读出xml-result?

1 个答案:

答案 0 :(得分:0)

我有多个FOR XML AUTO语句读取的类似问题。 解决了问题,将XmlReader传递给System.Xml.XPath.XPathDocument:

 public static XDocument MultipleNodes(XmlReader reader, string RootName = "Root")
    {
        var doc = new XDocument(new XElement(RootName));

        var xn = new XPathDocument(reader).CreateNavigator();
        XPathNodeIterator iterator = xn.Select("/*");   // Level 1 multiple Elements
        foreach (XPathNavigator item in iterator)
        {
            doc.Root.Add(XElement.Load(item.ReadSubtree()));
        }

        return doc;
    }