c# selectnodes возвращает null

46
25 июня 2018, 11:30

есть Xml вида:

<?xml version="1.0" encoding="windows-1251"?>
<ZL_LIST>
  <ZGLV>
    <VERSION>2.1</VERSION>
    <DATA>2018-05-14</DATA>
    <C_OKATO1>80000</C_OKATO1>
    <OKATO_OMS>04000</OKATO_OMS>
  </ZGLV>
  <SCHET>
    <CODE>0009</CODE>
    <YEAR>2018</YEAR>
    <MONTH>3</MONTH>
    <NSCHET>240318</NSCHET>
    <DSCHET>2018-05-14</DSCHET>
    <SUMMAV>751205.87</SUMMAV>
    <SUMMAP>751205.87</SUMMAP>
  </SCHET>
  <ZAP>
    <N_ZAP>1</N_ZAP>    
    <ZSL>
      <USL_OK>4</USL_OK>
      <VIDPOM>21</VIDPOM>
      <FOR_POM>1</FOR_POM>
      <P_DISP2>0</P_DISP2>
      <LPU>029001</LPU>
      <DATE_Z1>2018-03-07T00:00:00+05:00</DATE_Z1>
      <DATE_Z2>2018-03-07T00:00:00+05:00</DATE_Z2>
      <KD_Z>1</KD_Z>
      <RSLT>403</RSLT>
      <ISHOD>402</ISHOD>
      <IDSP>24</IDSP>
      <SUMV>2385.45</SUMV>
      <OPLATA>1</OPLATA>
      <SANK_IT>0.00</SANK_IT>
      <SL>
        <SL_ID>1CC6E2F41DC549178B6232C0BC55BDC2</SL_ID>
        <PROFIL>84</PROFIL>
        <DET>0</DET>
        <DISP>0</DISP>
        <NHISTORY>20180307220300_6858_81</NHISTORY>
        <DATE_1>2018-03-07T00:00:00+05:00</DATE_1>
        <DATE_2>2018-03-07T00:00:00+05:00</DATE_2>
        <KD>4</KD>
        <DS1>O20.0</DS1>
        <PRVS>25</PRVS>
        <ED_COL>1.00</ED_COL>
        <TARIF>2385.45</TARIF>
        <SUM_M>8465.69</SUM_M>
      </SL>
    </ZSL>
  </ZAP>
  <ZAP>
    <N_ZAP>2</N_ZAP>    
    <ZSL>
      <USL_OK>3</USL_OK>
      <VIDPOM>12</VIDPOM>
      <FOR_POM>2</FOR_POM>
      <P_DISP2>0</P_DISP2>
      <LPU>028800</LPU>
      <DATE_Z1>2018-03-19T00:00:00+05:00</DATE_Z1>
      <DATE_Z2>2018-03-19T00:00:00+05:00</DATE_Z2>
      <KD_Z>1</KD_Z>
      <RSLT>301</RSLT>
      <ISHOD>303</ISHOD>
      <IDSP>41</IDSP>
      <SUMV>651.79</SUMV>
      <OPLATA>1</OPLATA>
      <SANK_IT>0.00</SANK_IT>
      <SL>
        <SL_ID>073536B07537479A911A9E89F3AFC7E0</SL_ID>
        <PROFIL>97</PROFIL>
        <DET>0</DET>
        <DISP>0</DISP>
        <NHISTORY>70711</NHISTORY>
        <DATE_1>2018-03-19T00:00:00+05:00</DATE_1>
        <DATE_2>2018-03-19T00:00:00+05:00</DATE_2>
        <KD>4</KD>
        <DS1>M42.1</DS1>
        <CODE_MES1>600824</CODE_MES1>
        <CODE_MES2>600824</CODE_MES2>
        <PRVS>27</PRVS>
        <ED_COL>1.00</ED_COL>
        <TARIF>651.79</TARIF>
        <SUM_M>8465.69</SUM_M>
      </SL>
    </ZSL>
  </ZAP>

Количество нод ZAP всегда разное и неограниченно

Пытаюсь получить лист нод ZAP вот таким образом:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
//единичные ноды берет без проблем
XmlNode node_zl_list = doc.SelectSingleNode("ZL_LIST");
XmlNode node_zglv = node_zl_list.SelectSingleNode("ZGLV");
//всегда возвращает null
XmlNodeList nodeList_zap = node_zl_list.SelectNodes("ZAP");

SelectNodes всегда возвращает null. Как заставить его нормально прочитать значение?

Answer 1

Запустил ваш пример

void Main()
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);
    //единичные ноды берет без проблем
    XmlNode node_zl_list = doc.SelectSingleNode("ZL_LIST");
    XmlNode node_zglv = node_zl_list.SelectSingleNode("ZGLV");
    //всегда возвращает null
    XmlNodeList nodeList_zap = node_zl_list.SelectNodes("ZAP");
    foreach(var n in nodeList_zap) Console.WriteLine(n);
}

string xml = @"<?xml version=""1.0"" encoding=""windows-1251""?>
<ZL_LIST>
  <ZGLV>
    <VERSION>2.1</VERSION>
    <DATA>2018-05-14</DATA>
    <C_OKATO1>80000</C_OKATO1>
    <OKATO_OMS>04000</OKATO_OMS>
  </ZGLV>
  <SCHET>
    <CODE>0009</CODE>
    <YEAR>2018</YEAR>
    <MONTH>3</MONTH>
    <NSCHET>240318</NSCHET>
    <DSCHET>2018-05-14</DSCHET>
    <SUMMAV>751205.87</SUMMAV>
    <SUMMAP>751205.87</SUMMAP>
  </SCHET>
  <ZAP>
    <N_ZAP>1</N_ZAP>    
    <ZSL>
      <USL_OK>4</USL_OK>
      <VIDPOM>21</VIDPOM>
      <FOR_POM>1</FOR_POM>
      <P_DISP2>0</P_DISP2>
      <LPU>029001</LPU>
      <DATE_Z1>2018-03-07T00:00:00+05:00</DATE_Z1>
      <DATE_Z2>2018-03-07T00:00:00+05:00</DATE_Z2>
      <KD_Z>1</KD_Z>
      <RSLT>403</RSLT>
      <ISHOD>402</ISHOD>
      <IDSP>24</IDSP>
      <SUMV>2385.45</SUMV>
      <OPLATA>1</OPLATA>
      <SANK_IT>0.00</SANK_IT>
      <SL>
        <SL_ID>1CC6E2F41DC549178B6232C0BC55BDC2</SL_ID>
        <PROFIL>84</PROFIL>
        <DET>0</DET>
        <DISP>0</DISP>
        <NHISTORY>20180307220300_6858_81</NHISTORY>
        <DATE_1>2018-03-07T00:00:00+05:00</DATE_1>
        <DATE_2>2018-03-07T00:00:00+05:00</DATE_2>
        <KD>4</KD>
        <DS1>O20.0</DS1>
        <PRVS>25</PRVS>
        <ED_COL>1.00</ED_COL>
        <TARIF>2385.45</TARIF>
        <SUM_M>8465.69</SUM_M>
      </SL>
    </ZSL>
  </ZAP>
  <ZAP>
    <N_ZAP>2</N_ZAP>    
    <ZSL>
      <USL_OK>3</USL_OK>
      <VIDPOM>12</VIDPOM>
      <FOR_POM>2</FOR_POM>
      <P_DISP2>0</P_DISP2>
      <LPU>028800</LPU>
      <DATE_Z1>2018-03-19T00:00:00+05:00</DATE_Z1>
      <DATE_Z2>2018-03-19T00:00:00+05:00</DATE_Z2>
      <KD_Z>1</KD_Z>
      <RSLT>301</RSLT>
      <ISHOD>303</ISHOD>
      <IDSP>41</IDSP>
      <SUMV>651.79</SUMV>
      <OPLATA>1</OPLATA>
      <SANK_IT>0.00</SANK_IT>
      <SL>
        <SL_ID>073536B07537479A911A9E89F3AFC7E0</SL_ID>
        <PROFIL>97</PROFIL>
        <DET>0</DET>
        <DISP>0</DISP>
        <NHISTORY>70711</NHISTORY>
        <DATE_1>2018-03-19T00:00:00+05:00</DATE_1>
        <DATE_2>2018-03-19T00:00:00+05:00</DATE_2>
        <KD>4</KD>
        <DS1>M42.1</DS1>
        <CODE_MES1>600824</CODE_MES1>
        <CODE_MES2>600824</CODE_MES2>
        <PRVS>27</PRVS>
        <ED_COL>1.00</ED_COL>
        <TARIF>651.79</TARIF>
        <SUM_M>8465.69</SUM_M>
      </SL>
    </ZSL>
  </ZAP>
  </ZL_LIST>";

И все работает, на выходе

<ZAP>
   <N_ZAP>1</N_ZAP>
   <ZSL>
      <USL_OK>4</USL_OK>
      <VIDPOM>21</VIDPOM>
      <FOR_POM>1</FOR_POM>
      <P_DISP2>0</P_DISP2>
      <LPU>029001</LPU>
      <DATE_Z1>2018-03-07T00:00:00+05:00</DATE_Z1>
      <DATE_Z2>2018-03-07T00:00:00+05:00</DATE_Z2>
      <KD_Z>1</KD_Z>
      <RSLT>403</RSLT>
      <ISHOD>402</ISHOD>
      <IDSP>24</IDSP>
      <SUMV>2385.45</SUMV>
      <OPLATA>1</OPLATA>
      <SANK_IT>0.00</SANK_IT>
      <SL>
         <SL_ID>1CC6E2F41DC549178B6232C0BC55BDC2</SL_ID>
         <PROFIL>84</PROFIL>
         <DET>0</DET>
         <DISP>0</DISP>
         <NHISTORY>20180307220300_6858_81</NHISTORY>
         <DATE_1>2018-03-07T00:00:00+05:00</DATE_1>
         <DATE_2>2018-03-07T00:00:00+05:00</DATE_2>
         <KD>4</KD>
         <DS1>O20.0</DS1>
         <PRVS>25</PRVS>
         <ED_COL>1.00</ED_COL>
         <TARIF>2385.45</TARIF>
         <SUM_M>8465.69</SUM_M>
      </SL>
   </ZSL>
</ZAP>  
    <ZAP>
   <N_ZAP>2</N_ZAP>
   <ZSL>
      <USL_OK>3</USL_OK>
      <VIDPOM>12</VIDPOM>
      <FOR_POM>2</FOR_POM>
      <P_DISP2>0</P_DISP2>
      <LPU>028800</LPU>
      <DATE_Z1>2018-03-19T00:00:00+05:00</DATE_Z1>
      <DATE_Z2>2018-03-19T00:00:00+05:00</DATE_Z2>
      <KD_Z>1</KD_Z>
      <RSLT>301</RSLT>
      <ISHOD>303</ISHOD>
      <IDSP>41</IDSP>
      <SUMV>651.79</SUMV>
      <OPLATA>1</OPLATA>
      <SANK_IT>0.00</SANK_IT>
      <SL>
         <SL_ID>073536B07537479A911A9E89F3AFC7E0</SL_ID>
         <PROFIL>97</PROFIL>
         <DET>0</DET>
         <DISP>0</DISP>
         <NHISTORY>70711</NHISTORY>
         <DATE_1>2018-03-19T00:00:00+05:00</DATE_1>
         <DATE_2>2018-03-19T00:00:00+05:00</DATE_2>
         <KD>4</KD>
         <DS1>M42.1</DS1>
         <CODE_MES1>600824</CODE_MES1>
         <CODE_MES2>600824</CODE_MES2>
         <PRVS>27</PRVS>
         <ED_COL>1.00</ED_COL>
         <TARIF>651.79</TARIF>
         <SUM_M>8465.69</SUM_M>
      </SL>
   </ZSL>
</ZAP>
READ ALSO
Смена кодировок содержимого textbox

Смена кодировок содержимого textbox

Необходимо осуществить переход между кодировками, при этом каждый раз изменяя кодировку нужно чтобы изменялось содержимое textboxДелаю так`

34
DataGrid.SetBinding ItemsSource - Зависание UI

DataGrid.SetBinding ItemsSource - Зависание UI

Сначала я заполняю DataTable нужными мне значениями, а затем делаю привязку DataGrid к этой таблицеОднако, я встретился с такой проблемой как зависание...

58
C# импорт данных из excel таблицы и поиск по ней

C# импорт данных из excel таблицы и поиск по ней

Есть база поставщиков, она в табличке excelОдин из столбцов - тег, в нем через запятую указаны теги поставщика

28
Photon Unity Проблема с управлением персонажей

Photon Unity Проблема с управлением персонажей

столкнулся с проблемой разрабатывая онлайн игру на Unity с помощь сервиса Photon PunПолучается в чем проблема сама, когда я запуская окна с игрой(окно...

33