繁体   English   中英

以XML返回存储的proc结果

[英]return stored proc results as XML

我正在Web服务中编写返回XML输出的接口。 通过调用存储过程从MS SQL数据库查询输出。 虽然存储过程本身不返回XML,并且我对此没有任何控制权,但我需要将结果集返回为XML。

现在,我正在使用XmlWriter。 有没有更简单,更优雅的方法来做到这一点?

        StringBuilder sbLog = new StringBuilder();
        XmlWriter writer = XmlWriter.Create(sbLog);
        writer.WriteStartDocument();
        writer.WriteStartElement("LogSet");

        while (sqlRdr.Read())
        {
            writer.WriteStartElement("Log");

            writer.WriteStartElement("EntryID");
            writer.WriteValue(sqlRdr["EntryID"].ToString());
            writer.WriteEndElement();

           //and so on

是的XDocument可能是一个更干净的界面。 它看起来像这样:

var doc = new XDocument(
    new XElement("LogSet",
        new XElement("EntryID", sqlRdr["EntryID"].ToString()),
        new XElement(...)
    )
);

// save it to a file
doc.Save(pathToDoc);

// or just return it
return doc.ToString();

我不确定它是否优雅(我想这部分取决于您需要在代码中重现这种事情的次数),但是我前阵子写了一个XmlDataReader,它将IDataReader中的表格数据转换为Xml结果无需创建辅助文档/字符串。 由于WebServices可以返回XmlNode(而不是XmlReader),因此第二个类XmlNodeFactory进行该转换。

这是XmlDataReaderXmlNodeFactory的要点

用法类似于:

[WebMethod]
public XmlNode GetFeaturedItems(string storeId)
{
    var xmlReader = new XmlDataReader( 
        _db.GetFeaturedItems(storeId), 
        MyXmlNames.FeaturedItemsNamespace)
        {
            IncludeIndexField = false,
            IncludeResultLevel = false,
            RootElementName = "FeaturedItems",
            RowElementNameFormat = "Item"
        };

    return XmlNodeFactory.Create(xmlReader);      
}

暂无
暂无

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

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