Разделить XML на строки

Вопрос: Я хочу разбить XML-документ на список строк, но я полностью в недоумении. ....... ..... Я пытаюсь разбить этот файл на строки, так что все под первым операционным узлом находится в одной

Вопрос:

Я хочу разбить XML-документ на список строк, но я полностью в недоумении.

<RISKCALC-OUT> <AUTHENTICATION> <USERID></USERID> </AUTHENTICATION> <OPERATION-LIST> <OPERATION MODEL=»PRV» SUBMODEL=»GBR40EDF» VERSION=»4.0″ FUNCTION=»EDFCLC» TARGET=»New Platform»> ……. </OPERATION> <OPERATION MODEL=»PRV» SUBMODEL=»GBR40EDF» VERSION=»4.0″ FUNCTION=»EDFCLC» TARGET=»New Platform»> ….. </OPERATION> </OPERATION-LIST> </RISKCALC-OUT>

Я пытаюсь разбить этот файл на строки, так что все под первым операционным узлом находится в одной строке, а затем все под вторым операционным узлом находится во второй строке.

Я играл с XmlNodeLists, но у меня нигде нет. Мне не нужен общий ответ, как разделить их, готовые вставить отдельные строки.

Спасибо за вашу помощь.

Лучший ответ:

Вы можете использовать LINQ для XML следующим образом:

static void Main(string[] args) { string path = «XMLFile1.xml»; XDocument xdoc = XDocument.Load(path); var ops = xdoc.Descendants(«OPERATION») .Elements() .Select(n => n.ToString()) .ToList<string>(); ops.ForEach(s => Console.WriteLine(s)); }

Я использовал этот образец XML (добавленный случайный материал для целей тестирования):

<RISKCALC-OUT> <AUTHENTICATION> <USERID></USERID> </AUTHENTICATION> <OPERATION-LIST> <OPERATION MODEL=»PRV» SUBMODEL=»GBR40EDF» VERSION=»4.0″ FUNCTION=»EDFCLC» TARGET=»New Platform»> <SUBNODES ID=»1″> <ANOTHER ID=»56″></ANOTHER> </SUBNODES> </OPERATION> <OPERATION MODEL=»PRV» SUBMODEL=»GBR40EDF» VERSION=»4.0″ FUNCTION=»EDFCLC» TARGET=»New Platform»> <SUBNODES ID=»1″> <ANOTHER ID=»65″></ANOTHER> </SUBNODES> </OPERATION> </OPERATION-LIST> </RISKCALC-OUT>

и получил этот результат с указанным выше кодом:

<SUBNODES ID=»1″> <ANOTHER ID=»56″></ANOTHER> </SUBNODES> <SUBNODES ID=»1″> <ANOTHER ID=»65″></ANOTHER> </SUBNODES>

Чтобы сохранить узлы OPERATION, вы можете удалить Elements() следующим образом:

var ops = xdoc.Descendants(«OPERATION») .Select(n => n.ToString()) .ToList<string>();

который будет производить

<OPERATION MODEL=»PRV» SUBMODEL=»GBR40EDF» VERSION=»4.0″ FUNCTION=»EDFCLC» TARGE T=»New Platform»> <SUBNODES ID=»1″> <ANOTHER ID=»56″></ANOTHER> </SUBNODES> </OPERATION> <OPERATION MODEL=»PRV» SUBMODEL=»GBR40EDF» VERSION=»4.0″ FUNCTION=»EDFCLC» TARGE T=»New Platform»> <SUBNODES ID=»1″> <ANOTHER ID=»65″></ANOTHER> </SUBNODES> </OPERATION> Ответ №1

Я бы использовал LinQ для Xml.
Обслуживание проще.

XElement xmla = XElement.Load(«input.xml»); var results = from operationList in xmla.Descendants(«OPERATION») select operationList.Value; foreach (var result in results) { Console.WriteLine(result); }

EDIT, чтобы иметь лучшее из обоих миров
(На самом деле здесь три мира: Object/String и XML)

Класс для хранения данных:

class Operation { public String Model { get; set; } public String SubModel { get; set; } // and so on … public String TagContent { get; set; } public String FullTag{ get; set; } }

Сделайте запрос linq:

XElement xmla = XElement.Load(«input.xml»); var operations = from operation in xmla.Descendants(«OPERATION») select new Operation { Model = operation.Attribute(«MODEL»).Value, SubModel = operation.Attribute(«SUBMODEL»).Value, TagContent = operation.Value, FullTag = operation.ToString(), }; foreach (var operation in operations) { Console.WriteLine(operation.Model + » — » + operation.SubModel+ » — » + operation.TagContent » — » + operation.FullTag); }

С уважением

Оцените статью
Добавить комментарий