复制由 XMLWriter 创建的 XML 文档的单个元素
Copy single element of XML document being created by XMLWriter
我的 C# 应用程序具有将对象列表 (inputList
) 作为参数的方法,它使用 TextWriter 和 XMLWriter 创建一个 XML 字符串,代码如下,提交到网络服务。
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>
您的 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);
我的 C# 应用程序具有将对象列表 (inputList
) 作为参数的方法,它使用 TextWriter 和 XMLWriter 创建一个 XML 字符串,代码如下,提交到网络服务。
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>
您的 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);