Я пытаюсь извлечь отдельный узел из некоторого XML, записать узел и все его дочернее содержимое в новый XML-документ и сохранить его на диск.
В некоторых случаях (например, в моем тестовом примере) существует несколько узлов, которые соответствуют критериям, и все они должны быть записаны в отдельные файлы.
Пока что все в моей функции работает как положено, вплоть до того момента, пока я не запишу файл на диск.
Исключение: «Исключение: System.Xml.XmlException» в System.Xml.dll »
и прикрепленное сообщение: «Недопустимый документ XML. Документ не имеет корневого элемента». Как мне решить это?
Я добавил много консольных выходов, чтобы показать, что каждый этап работает так, как ожидалось.
Моя функция заключается в следующем:
private void ExtractQIF()
{
var httpClient = new HttpClient();
int QIFFound = 0;
try
{
string assetsTarget = httpAuthority + "/asset";
var XMLRaw = httpClient.GetStringAsync(assetsTarget);
XmlDocument XML = new XmlDocument();
XML.LoadXml(XMLRaw.Result);
XmlNodeList QIFDocuments = XML.GetElementsByTagName("QIFDocument");
Console.WriteLine("QIF Documents found: " + QIFDocuments.Count); // WE ARE SUCCESSFULLY FINDING QIFDOCS IN THE ASSETS REQ
foreach (XmlNode QIFDoc in QIFDocuments)
{
QIFFound++;
try
{
Console.WriteLine(QIFDoc.InnerXml); // Debug shizzle
Console.WriteLine($"Document #{QIFFound} is being saved");
XmlDocument OutputQIFFile = new XmlDocument();
OutputQIFFile.ImportNode(QIFDoc, true);
Console.WriteLine("Node Imported to Document"); // Debug Shizzle
OutputQIFFile.Save(QIFSaveLocation); // This is the bastard line that isn't working
Console.WriteLine($"Document {QIFFound} Saved to Disk"); // Debug Shizzle
//Finally we should change the file extension to .qif
}
catch (Exception balls)
{
Console.WriteLine("COULD NOT EXTRACT QIF: Failed at document " + QIFFound);
Console.WriteLine(balls.Message);
}
}
Console.WriteLine("All QIF written to disk");
}
catch
{ MessageBox.Show("COULD NOT EXTRACT ALL QIF");}
}
Соответствующая информация о консоли выглядит следующим образом:
QIF Documents found: 2
<QPId xmlns="http://qifstandards.org/xsd/qif3">ec871a54-5bb5-470b-9ff7-de757d7726a1</QPId><Version xmlns="http://qifstandards.org/xsd/qif3"><TimeCreated>2019-01-22T15:51:20.874+00:00</TimeCreated></Version><Header xmlns="http://qifstandards.org/xsd/qif3">.... Blah Blah Blah, a shit tonne of XML
Document #1 is being saved
Node Imported to Document
Exception thrown: 'System.Xml.XmlException' in System.Xml.dll
COULD NOT EXTRACT QIF: Failed at document 1
Invalid XML document. The document does not have a root element.
<QPId xmlns="http://qifstandards.org/xsd/qif3">27400291-ea3d-41de-afee-69d186c4288f</QPId><Version xmlns="http://qifstandards.org/xsd/qif3"><TimeCreated>2019-01-22T15:50:16.827+00:00</TimeCreated></Version><Header xmlns="http://qifstandards.org/xsd/qif3"><Application> .... Blah Blah Bla, a shit tonne of XML
Document #2 is being saved
Node Imported to Document
Exception thrown: 'System.Xml.XmlException' in System.Xml.dll
COULD NOT EXTRACT QIF: Failed at document 2
Invalid XML document. The document does not have a root element.
All QIF written to disk
Я также пытался добавить узел к самому документу, но ошибки и советы вокруг них, похоже, возвращают меня к тому, как я пытаюсь реализовать его выше.
Мне кажется, что узел заполнен правильно. Есть идеи?