Если я вас правильно понимаю, то данные, которые вы ищете, начинаются после конверта SOAP. После искомых данных нет мусора / ненужного содержимого.
Заголовок SOAP не начинается с объявления XML (<?xml version=
и т. Д.).
Ищем начало документа
Простое решение - найти начало XML-документа (данные, которые вы ищете) и отобрать все до этого.
var startOfRealDocumentMarker = "<?xml version=\"1.0\"";
var startIndex = dirtyXmlString.IndexOf(startOfRealDocumentMarker);
if(startIndex == -1) {
throw new Exception("Start of XML not found. Now what?");
}
var cleanXmlString = dirtyXmlString.Substring(startIndex);
Если заголовок SOAP также имеет декларацию XML, вы можете вместо этого искать конечный тег конверта SOAP. Или вы можете начать поиск объявления со 2-го символа, поэтому пропустите первый.
Это явно не надежное решение, которое будет работать в любом случае. Но, может быть, это будет работать во всех ваших случаях?
Пропуск строк
Если вы уверены, что сработает, чтобы всегда начинать чтение со строки 30 входного файла, вы можете использовать этот метод вместо этого.
XmlDocument xDoc = new XmlDocument();
using (var rdr = new StreamReader(pathToXmlFile))
{
// Skip until reader is positioned at start of line 30
for (var i = 0; i < 29; ++i)
{
rdr.ReadLine();
}
// Load document from current position of reader
xDoc.Load(rdr);
}