XmlReader、XmlWriter - 使用流连接 xmlFiles
XmlReader,XmlWriter - concat xmlFiles using streams
我有一些 return xml 文件的程序。
是否可以仅使用流连接多个 xml 文件?
像这样:
XmlWriter writer = XmlWriter.Create(sb,settings)
{
foreach(var cmd in XmlFiles)
{
using (XmlReader r = cmd.ExecuteXmlReader())
{
while (r.Read())
{
string xml = r.ReadOuterXml();
writer.WriteRaw(xml);
}
}
}
}
我需要在不使用字符串的情况下执行此操作,因为我必须处理大文件。
如果您不想使用字符串,那么为什么要使用 ReadOuterXml
和 WriteRaw
?有一种方法 WriteNode
消耗传入的 XmlReader
,例如
string[] inputFiles = { "XMLFile1.xml", "XMLFile2.xml" };
using (XmlWriter xw = XmlWriter.Create("result.xml"))
{
xw.WriteStartDocument();
xw.WriteStartElement("root");
foreach (string inputFile in inputFiles)
{
using (XmlReader xr = XmlReader.Create(inputFile))
{
xr.MoveToContent();
xw.WriteNode(xr, true);
}
}
xw.WriteEndElement();
xw.WriteEndDocument();
将创建一个新的 XML 文档,其中 root
元素包含两个 XML 文件的内容。
因此在您的代码中您可以使用
foreach(var cmd in XmlFiles)
{
using (XmlReader r = cmd.ExecuteXmlReader())
{
r.MoveToContent();
writer.WriteNode(r, false);
}
}
只要您确保输出根元素包装器(或者使用带有 XmlWriterSettings 和 ConformanceLevel.Fragment 的 XmlWriter)。
我有一些 return xml 文件的程序。
是否可以仅使用流连接多个 xml 文件?
像这样:
XmlWriter writer = XmlWriter.Create(sb,settings)
{
foreach(var cmd in XmlFiles)
{
using (XmlReader r = cmd.ExecuteXmlReader())
{
while (r.Read())
{
string xml = r.ReadOuterXml();
writer.WriteRaw(xml);
}
}
}
}
我需要在不使用字符串的情况下执行此操作,因为我必须处理大文件。
如果您不想使用字符串,那么为什么要使用 ReadOuterXml
和 WriteRaw
?有一种方法 WriteNode
消耗传入的 XmlReader
,例如
string[] inputFiles = { "XMLFile1.xml", "XMLFile2.xml" };
using (XmlWriter xw = XmlWriter.Create("result.xml"))
{
xw.WriteStartDocument();
xw.WriteStartElement("root");
foreach (string inputFile in inputFiles)
{
using (XmlReader xr = XmlReader.Create(inputFile))
{
xr.MoveToContent();
xw.WriteNode(xr, true);
}
}
xw.WriteEndElement();
xw.WriteEndDocument();
将创建一个新的 XML 文档,其中 root
元素包含两个 XML 文件的内容。
因此在您的代码中您可以使用
foreach(var cmd in XmlFiles)
{
using (XmlReader r = cmd.ExecuteXmlReader())
{
r.MoveToContent();
writer.WriteNode(r, false);
}
}
只要您确保输出根元素包装器(或者使用带有 XmlWriterSettings 和 ConformanceLevel.Fragment 的 XmlWriter)。