我有一个包含大量XML数据的文档,但是每个块之间都有纯文本。如何仅提取XML数据?
即
blah blah blah
===: text text text :===
<?xml version="1.0" ?>
<Data>
<Line>information</Line>
<Line2>more information</Line2>
</Data>
===: text text text :===
blah blah blah
blah blah blah
===: text text text :===
<?xml version="1.0" ?>
<Data>
<Line>2nd information</Line>
<Line2>more information</Line2>
</Data>
===: text text text :===
blah blah blah
带有=== :: =的文本总是不同但不需要包括在内。
答案 0 :(得分:1)
此处的文件将按照与(line.StartsWith("===:") && line.EndsWith(":==="))
匹配的任何行对您的文件进行分区。
var fs = File.OpenText("file.xml");
var partitions = new List<string>();
var sb = new StringBuilder();
string line;
while ((line = fs.ReadLine()) != null)
{
if (line.StartsWith("===:") && line.EndsWith(":==="))
{
if(sb.Length > 0)
partitions.Add(sb.ToString());
continue;
}
sb.AppendLine(line);
}
if(sb.Length > 0)
partitions.Add(sb.ToString());
这个构建分区直到遇到分割线,然后它启动另一个分区。
答案 1 :(得分:-1)
如果你想保留缩进,试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication43
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
string xml = "";
string inputline = "";
StreamReader reader = new StreamReader(FILENAME);
while ((inputline = reader.ReadLine()) != null)
{
if (inputline.Trim().StartsWith("<"))
{
xml += inputline + "\n";
}
}
}
}
}