无法处理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)不确定我是否搞砸了某个地方。
如果这是一种不同的方式,我也会尝试新的方式。谢谢您的帮助。
答案 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)
我认为有两种方法:
您应该通过添加xml文件将xml保存到xml文件中 然后使用 Load 方法将项目与XmlDocument一起使用,如:
XmlDocument doc = new XmlDocument.Load(FileName);
...
...
var _checkins = _Svc.CheckingOutForUserReview(doc.innerXml);
将xml保存为字符串文字,并将其与XmlDocument一起使用 LoadXml 方法如:
XmlDocument doc = new XmlDocument.LoadXml(stringThatContainsXml);
...
...
var _checkins = _Svc.CheckingOutForUserReview(doc.innerXml);
您也可以使用 XDocument 和 XElement 类,但我对 XmlDocument 的关注是,它也适用于小于3.5的框架。框架3.5中引入了XDocument
和XElement
。
同时将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
享受