C# 将xml数据传递到字符串中用作参数
在处理xml和正确使用xml方面有困难。因此,我正在创建一个测试方法,其中一个参数是xml数据,我不知道如何传递它 服务C# 将xml数据传递到字符串中用作参数,c#,xml,C#,Xml,在处理xml和正确使用xml方面有困难。因此,我正在创建一个测试方法,其中一个参数是xml数据,我不知道如何传递它 服务 public IEnumerable<Submissions> CheckingOutForUserReview(string data) { var _submissions = DataContextManager.StoredProcs.CheckingOutForUserReview<SSubmissions&
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 IEnumerable CheckingOutForUserReview(字符串数据)
{
var\u submissions=DataContextManager.StoredProcs.CheckingOutForUserReview(数据,s=>新提交
{
QRCodeGUID=SubmissionsColumnMap.QRCodeGUID,
StoragePath=SubmissionsColumnMap.StoragePath,
UploadedByUsersID=SubmissionsColumnMap.UploadedByUsersID(s)
});
返回(u)意见书;;
}
存储过程:
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);
}
公共虚拟IEnumerable CheckingOutForUserReview(字符串数据,Func modelBinder)
{
SqlCommand _command=newsqlcommand(“dbo.CheckingOutForUserReview”);
_command.CommandType=CommandType.storedProcess;
_Add(新的SqlParameter{ParameterName=“Data”,SqlDbType=SqlDbType.Xml,Value=Data});
返回DbInstance.ExecuteAs(_命令,modelBinder);
}
这是我的测试方法:
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);
}
public void CheckingOutForUserReview()
{
字符串_data=@”
2FAC636E-F96C-4465-9272-760BAF73C0DF
10B5236C-47FD-468D-B88D-D789CA0C663A
1.
1.
";
XmlDocument doc=新的XmlDocument();
doc.LoadXml(_数据);
var_Svc=新提交服务();
var\u checkins=\u Svc.CheckingOutForUserReview(doc.InnerXml);
}
更新:
我的CheckingOutForUserReview()方法接受一个XmlDocument,因为我将它更改为存储过程中的XmlDocument,而我当前拥有的是一个错误,即我有无效的参数(System.Xml.XmlDocument),不确定我是否在某个地方出错
如果这是一种不同的方式,我也乐于尝试新的方式。谢谢你的帮助 正如我在评论中所说,我认为最好的方法是将XML保存到一个单独的文件中 如果不想这样做,可以使用逐字字符串文字(请注意双引号):
字符串数据=@”
2FAC636E-F96C-4465-9272-760BAF73C0DF
10B5236C-47FD-468D-B88D-D789CA0C663A
1.
1.
";
我认为有两种方法:
XmlDocument doc = new XmlDocument.Load(FileName);
...
...
var _checkins = _Svc.CheckingOutForUserReview(doc.innerXml);
XmlDocument doc = new XmlDocument.LoadXml(stringThatContainsXml);
...
...
var _checkins = _Svc.CheckingOutForUserReview(doc.innerXml);
XmlDocument doc = new XmlDocument.Load(FileName);
...
...
var _checkins = _Svc.CheckingOutForUserReview(doc.innerXml);
XmlDocument doc = new XmlDocument.LoadXml(stringThatContainsXml);
...
...
var _checkins = _Svc.CheckingOutForUserReview(doc.innerXml);
XDocument
和XElement
是在框架3.5中引入的
此外,将xml加载到解析器将有助于过滤出无效的xml。(如果错误尝试使用)
我在你的片段中注意到了另一件事:
Assert.IsNotNull(_data);
它应该在\u Svc
初始化之前出现,因为如果中没有数据,那么初始化就没有意义
因此,您的代码如下所示:
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);
}
public void CheckingOutForUserReview()
{
string _data=“我想在这里传递xml”;
IsNotNull(_data);我不知道将任何类型的字符串作为参数传递到方法中有什么问题
如果XML是从代码生成的,那么最好使用StringBuilder来构建它,以减少在连接字符串时创建新引用
如果XML最初来自文件,请将文件路径传递到方法中,然后在那里打开文档。打开和读取XML文档,或者将字符串加载到XML文档并将其作为XML而不是字符串处理,有很多不同的方法
示例:
最后来自MSDN:
享受你不能将XML保存到一个单独的文件中,然后从那里加载它吗?另外,你的XML无效,你打开一次
,然后关闭两次。@斯维克,所以在测试方法本身中没有办法这样做吗?我只想测试并确保返回我需要的内容。谢谢你捕获关闭记录的标记。是吗使用字符串而不是XElement来处理xml本身有什么原因吗?@johnv2020没有,没有其他原因,我不知道最好的方法是什么。第一次用这种方式处理xml。如果不知道您想用xml做什么,很难说清楚-但一般来说,您应该明确使用xml类型、XElement或XDocument在处理xml数据而不是简单的字符串时,每天都学习一些东西,不知道可以使用“
而不是\”
@Bob。嗯,不完全是这样,您可以使用普通字符串文字和\”
,例如“\”
,也可以使用逐字字符串文字和“
,例如,@”
@downvoter Care要解释一下你认为这个答案有什么错吗?我认为它完全符合问题的要求。我真的看不出有什么理由与6年前发布的、3年来被4.0超越的内容兼容。在我看来,这应该是你编写代码的首选方式。@Default,I如果某个东西在所有框架中都得到支持,我更喜欢它,而且它肯定会影响代码的编写方式(比如说由LINQ实现)。这只是我的观点。@Neverless感谢您分享的所有信息。我尝试过进行更改(上面的更新)但是我遇到了错误,因为我将xml的参数从stringdata
更改为xmldocumentdata
类型,而不是sur