Печать XML-данных в ПРЕДСТАВЛЕНИИ ТАБЛИЦЫ ДАННЫХ C#

#c# #xmlnodelist

#c# #xmlnodelist

Вопрос:

  <Tools ID="RDM">
  <ButtonTool>
    <Item ID="IS" TYPE="IS" NAME="IS" COLUMN_ID="ID" ORDERNO="UID" />
    <Item ID="CS" TYPE="PROC" NAME="ABC">
      <Path>C:ProgramDatabaseVLaunch.exe</Path>
      <Parameter>/USERID=acc /USERPASS=abc /ID=ITEM /QUERY</Parameter>
    </Item>
    <Item ID="APPLICATION" TYPE="PROC" NAME="XYZ">
      <Path>D:ACTbinACTLancher.exe</Path>
      <Parameter>%U %I -APPLICATION $$PATIENTID$$ CT $$RDM_UID$$</Parameter>
    </Item>
    <Item ID="REPO" TYPE="PROC" NAME="AAA">
      <Path>C:appLUCLauncher.exe</Path>
      <Parameter>/USERID=acc /USERPASS=abc /ID=ITEM</Parameter>
    </Item>
  </ButtonTool>
</Tools>

  

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

    XmlNodeList nl = _doc.SelectNodes("Tools/ButtonTool/Item");
                for (int i = 0; i < nl.Count; i  )
                {
                    string sType = base.Com.GetAttri(nl[i], "TYPE", "");
                    if (sType == "RIS")
                    {
                        _dt.Rows.Add(base.Com.GetAttri(nl[i], "ID", ""),
                                  base.Com.GetAttri(nl[i], "TYPE", ""),
                                  base.Com.GetAttri(nl[i], "NAME", ""),
                                  base.Com.GetAttri(nl[i], "COLUMN_ID", ""),
                                  base.Com.GetAttri(nl[i], "ORDERNO", ""));
                    }
                    else
                    {
                        //for (int j = 0; j < nl.Count; j  )
                        //{
                        XmlNodeList pl = _doc.SelectNodes("Tools/ButtonTool/Item/Path");
                        txtPath.Text = pl.ToString();
                        XmlNode ppl = _doc.SelectSingleNode("Tools/ButtonTool/Item/Parameter");
                        txtUser.Text = ppl.InnerText;
                        //string Path = txtPath.Text;
                        _dt.Rows.Add(base.Com.GetAttri(nl[i], "ID", ""),
                              base.Com.GetAttri(nl[i], "TYPE", ""),
                              base.Com.GetAttri(nl[i], "NAME", ""),
                              base.Com.GetAttri(nl[i], "COLUMN_ID", ""),
                              base.Com.GetAttri(nl[i], "ORDERNO", ""), txtUser.Text, txtPath.Text
                              );
                        //}

                    }

  

Комментарии:

1. Вопрос: Что такое «база»? Если это пользовательский класс, можете ли вы показать его нам?

2. Я новичок в этом, но я думаю, что он используется для получения доступа к функции GetAttri(), которая используется для получения атрибута узла из xml

3. Для меня это звучит как нечто, что можно исправить с помощью некоторого xpath. Когда вы выбираете один узел из документа, используя общее имя, он всегда найдет первый узел в документе. Используя xpath, вы можете указать путь непосредственно к нужному узлу во время выполнения цикла. Что-то вроде /Item[i] где i — ваш номер цикла for . Я бы начал с этого, если вы новичок в этом w3schools.com/xml/xpath_intro.asp

4. когда я использую item [i], он выдает исключение.

5. но это работает, если вместо этого я использую числа, например, item [2], но опять же, когда вводятся новые данные, они все равно будут показывать тот же путь и параметр.