我的C#应用程序有一个方法,它将对象列表(inputList
)作为参数,它使用TextWriter和XMLWriter创建一个XML字符串,并使用下面的代码并提交给Web服务。
using (TextWriter writer = new Utf8StringWriter())
{
using (XmlWriter xw = XmlWriter.Create(writer, settings))
{
xw.WriteStartElement("submission");
xw.WriteElementString("version", XMLversion);
xw.WriteElementString("user", USER_NAME);
foreach (var obj in inputList)
{
xw.WriteStartElement("node");
xw.WriteElementString("data1", obj.data1.ToString());
xw.WriteElementString("data2", obj.data2.ToString());
xw.WriteElementString("data3", obj.data3.ToString());
xw.WriteElementString("data4", obj.data4.ToString());
xw.WriteEndElement();
}
}
xmlFile = writer.ToString();
}
记录列表中每个项目的提交的要求之一。所以我想知道是否有更有效的方法在foreach
循环中创建XML节点的字符串?
我之后考虑过将XMLReader与字符串一起使用,但这是一个全新的过程,虽然我知道我可以手动创建它,但我很乐意这样做,我愿意接受其他建议。本质上,我正在寻找一种生成字符串的有效技术,如下所示:
<node>
<data1>obj.data1.ToString()</data1>
<data2>obj.data2.ToString()</data2>
<data3>obj.data3.ToString()</data3>
<data4>obj.data4.ToString()</data4>
</node>
答案 0 :(得分:0)
您的XML文档似乎不足以保证使用XmlWriter和XmlReader。假设它可以很好地适应内存,那么我就可以使用XmlDocument,它允许你将一个节点的OuterXml(或者你喜欢的InnerXml)作为一个字符串。
var document = new XmlDocument();
var submission = document.CreateElement("submission");
document.AppendChild(submission);
var version = document.CreateElement("version");
submission.AppendChild(version);
var versionText = document.CreateTextNode(XMLversion);
version.AppendChild(versionText);
var user = document.CreateElement("user");
submission.AppendChild(user);
var userText = document.CreateTextNode(USER_NAME);
user.AppendChild(userText);
foreach (var obj in inputList)
{
var node = document.CreateElement("node");
submission.AppendChild(node);
var data1 = document.CreateElement("data1");
node.AppendChild(data1);
var data1Text = document.CreateTextNode(obj.data1.ToString());
data1.AppendChild(data1Text);
// TODO: repeat last 4 lines for data2, data3 and data4
Console.WriteLine(node.OuterXml);
}
Console.WriteLine(document.OuterXml);