将xml数据传递给字符串以用作参数

时间:2013-06-17 20:13:23

标签: c# xml

无法处理xml并正确地将其用于我的目的。所以我正在创建一个测试方法,其中一个参数是xml数据,我不知道如何传递它。

服务

public IEnumerable<Submissions> CheckingOutForUserReview(string data)
        {
            var _submissions = DataContextManager.StoredProcs.CheckingOutForUserReview<SSubmissions>(data, s => new Submissions
            {
               QRCodeGUID = SubmissionsColumnMap.QRCodeGUID(s),
               StoragePath = SubmissionsColumnMap.StoragePath(s),
               UploadedByUsersID = SubmissionsColumnMap.UploadedByUsersID(s)
            });

            return _submissions;
        }

存储过程

public virtual IEnumerable<T> CheckingOutForUserReview<T>(string data, Func<IDataRecord, T> modelBinder)
        {
            SqlCommand _command = new SqlCommand("dbo.CheckingOutForUserReview");
            _command.CommandType = CommandType.StoredProcedure;
            _command.Parameters.Add(new SqlParameter { ParameterName = "Data", SqlDbType = SqlDbType.Xml, Value = data });
            return DbInstance.ExecuteAs<T>(_command, modelBinder);
        }

这是我的TestMethod:

    public void CheckingOutForUserReview()
            {
string _data = @"<CheckingOutForUserReview xmlns:i=""www.w3.org/2001/XMLSchema-instance"" xmlns=""schemas.name.com/2013/03/Malt.Models"">
                                <Record>
                                <QRCodeID>2FAC636E-F96C-4465-9272-760BAF73C0DF</QRCodeID>
                                <SubmissionID>10B5236C-47FD-468D-B88D-D789CA0C663A</SubmissionID>
                                <UserID>1</UserID>
                                <Page>1</Page>
                                </Record>
                            </CheckingOutForUserReview>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(_data);
            var _Svc = new SubmissionsService();
            var _checkins = _Svc.CheckingOutForUserReview(doc.InnerXml);
        }

更新 我的CheckingOutForUserReview()方法接受一个XmlDocument,因为我将其更改为我的存储过程中的那个,并且我现在拥有的是一个错误,我有无效的参数(System.Xml.XmlDocument)不确定我是否搞砸了某个地方。

如果这是一种不同的方式,我也会尝试新的方式。谢谢您的帮助。

3 个答案:

答案 0 :(得分:0)

就像我在评论中所说,我认为最好的方法是将XML保存到单独的文件中。

如果您不想这样做,可以使用逐字字符串文字(注意双引号):

string data = @"<CheckingOutForUserReview xmlns:i=""www.w3.org/2001/XMLSchema-instance"" xmlns=""schemas.name.com/2013/03/Malt.Models"">
    <Record>
    <QRCodeID>2FAC636E-F96C-4465-9272-760BAF73C0DF</QRCodeID>
    <SubmissionID>10B5236C-47FD-468D-B88D-D789CA0C663A</SubmissionID>
    <UserID>1</UserID>
    <Page>1</Page>
    </Record>
</CheckingOutForUserReview>";

答案 1 :(得分:0)

我认为有两种方法:

  1. 您应该通过添加xml文件将xml保存到xml文件中 然后使用 Load 方法将项目与XmlDocument一起使用,如:

    XmlDocument doc = new XmlDocument.Load(FileName);
    ...
    ...
    var _checkins = _Svc.CheckingOutForUserReview(doc.innerXml);
    
  2. 将xml保存为字符串文字,并将其与XmlDocument一起使用 LoadXml 方法如:

    XmlDocument doc = new XmlDocument.LoadXml(stringThatContainsXml);
    ...
    ...
    var _checkins = _Svc.CheckingOutForUserReview(doc.innerXml);
    
  3. 您也可以使用 XDocument XElement 类,但我对 XmlDocument 的关注是,它也适用于小于3.5的框架。框架3.5中引入了XDocumentXElement

    同时将xml加载到解析器中将有助于过滤掉无效的xml。 (如果错误地尝试使用)

    我在你的片段中注意到的另一件事:

    Assert.IsNotNull(_data);
    

    应该在_Svc的初始化之前,因为如果_data初始化中没有数据,那么初始化是没有意义的。

    所以你的代码看起来像是:

    public void CheckingOutForUserReview()
    {
        string _data = "I want to pass in xml here";
    
        Assert.IsNotNull(_data);  <--------------- See the re-ordering
    
        var _Svc = new SubmissionsService();
        var _checkins = _Svc.CheckingOutForUserReview(_data);
    }
    

答案 2 :(得分:0)

我没有看到将任何类型的字符串作为参数传递给方法

的问题

如果您的XML是从您的代码生成的,那么最好使用StringBuilder来构建它,以减少在连接字符串时创建新引用。

如果您的XML最初来自文件,请将文件路径传递给您的方法,然后在那里打开文档。有许多不同的方法可以打开和读取XML文档,或者将字符串加载到XML文档中并将其作为XML而不是字符串处理。

示例:

http://www.codeproject.com/Articles/24375/Working-with-XML

http://forum.codecall.net/topic/58239-c-tutorial-reading-and-writing-xml-files/

最后来自MSDN:

http://msdn.microsoft.com/en-us/library/aa288481%28v=vs.71%29.aspx

享受