繁体   English   中英

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

[英]How can i correctly output XML-data with ExecuteXmlReader

我有一个ASP.NET 4.0应用程序,我尝试使用SQLCommand类中的ExecuteXmlReader函数来获取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可以在Knoten vom Typ'Element'中找到最好的名称,而在Knoten vom Typ'None'中则可以。 (德语翻译)

奇怪的是,错误发生在XElement.Load(query.ExecuteXmlReader) 但是代码运行得更远! 它还将xml数据保存到磁盘! 这怎么可能发生,我怎么能没有错误地读出xml结果?

我在读取多个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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM