Есть ли способ проверить, содержит ли конкретный c Узел из XML -файла комментарий, и если он делает, чтобы прочитать комментарий? - PullRequest
0 голосов
/ 04 марта 2020

Я хочу прочитать все комментарии от указанных c узлов и поместить их в список в C#.

Мой код:

List<string> keyList = new List<string>();
List<string> valueList= new List<string>();

var xmldoc = new XmlDocument();
xmldoc.Load("xmlfile.xml");

var result = xmldoc.SelectNodes(/manuel/chapter-ref/chapter/chapter-ref/chapter/block/procedure/step/action/table/tgroup/tbody/row/entry/p/formfield/@field_id);

foreach(XmlNode item in result){
keyList.Add(item.Value)
}

Таким образом, я могу получить каждый field_id из полей формы и поместить их в список ключей. Некоторые поля содержат комментарий, а некоторые нет. Я хочу добавить эти комментарии в список valueList, и если поле формы не содержит комментарий, я хочу добавить «нет значения» в список. Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Выберите комментарии в XPath, используя foo/bar/comment()

Поскольку вы уже вызываете SelectNodes к полю формы, я предлагаю изменить XPath и добавить оператор if, проверяющий узел комментария.

List<string> keyList = new List<string>();
List<string> valueList= new List<string>();

var xmldoc = new XmlDocument();
xmldoc.Load("xmlfile.xml");

// Removed '/@field_id'
var result = xmldoc.SelectNodes("/manuel/chapter-ref/chapter/chapter-ref/chapter/block/procedure/step/action/table/tgroup/tbody/row/entry/p/formfield");

foreach(XmlElement item in result)
{
    var nd = item.SelectSingleNode("comment()");
    if (nd != null) valueList.Add(nd.InnerText);
    else valueList.Add("no val");

    keyList.Add(item.GetAttribute("field_id")); // Changed to GetAttribute
}
0 голосов
/ 04 марта 2020

Использование xml liinq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication159
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            var comments = doc.DescendantNodes().Where(x => x.GetType() == typeof(XComment)).ToList();            
         }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...