none
странная работа merge для объединения xml RRS feed

  • Общие обсуждения

  • стоит задача объединить несколько xml в один - использовал пример для написания кода http://support.microsoft.com/kb/311530/ru

    файл 1

    <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
      <Obj RefId="0">
        <TN RefId="0">
          <T>System.Management.Automation.PSCustomObject</T>
          <T>System.Object</T>
        </TN>
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\taskeng.exe</S>
          <S N="ProcessId">0x11c4</S>
          <DT N="TimeCreated">2014-08-15T18:36:00+04:00</DT>
          <S N="Computer">HQ-WS004021.rzdp.ru</S>
          <S N="UserName">markelovve</S>
        </MS>
      </Obj>
      <Obj RefId="1">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\dllhost.exe</S>
          <S N="ProcessId">0xef8</S>
          <DT N="TimeCreated">2014-08-15T17:51:43+04:00</DT>
          <S N="Computer">HQ-WS004021.rzdp.ru</S>
          <S N="UserName">markelovve</S>
        </MS>
      </Obj>
      <Obj RefId="2">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\taskeng.exe</S>
          <S N="ProcessId">0x23b4</S>
          <DT N="TimeCreated">2014-08-15T17:36:00+04:00</DT>
          <S N="Computer">HQ-WS004021.rzdp.ru</S>
          <S N="UserName">markelovve</S>
        </MS>
      </Obj>
    </Objs>

    файл 2

    <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
      <Obj RefId="0">
        <TN RefId="0">
          <T>System.Management.Automation.PSCustomObject</T>
          <T>System.Object</T>
        </TN>
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\taskeng.exe</S>
          <S N="ProcessId">0x7e4</S>
          <DT N="TimeCreated">2014-08-15T18:01:00+04:00</DT>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
        </MS>
      </Obj>
      <Obj RefId="1">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Users\MikhailovNE\AppData\Roaming\SaveSense\UpdateProc\UpdateTask.exe</S>
          <S N="ProcessId">0x17bc</S>
          <DT N="TimeCreated">2014-08-15T17:56:00+04:00</DT>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
        </MS>
      </Obj>
      <Obj RefId="2">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4688</I32>
          <S N="NewProcessName">C:\Users\MikhailovNE\AppData\Roaming\SaveSense\UpdateProc\UpdateTask.exe</S>
          <S N="ProcessId">0x7e4</S>
          <DT N="TimeCreated">2014-08-15T17:56:00+04:00</DT>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <S N="NewProcessId">0x17bc</S>
        </MS>
      </Obj>
      <Obj RefId="3">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\dllhost.exe</S>
          <S N="ProcessId">0x1720</S>
          <DT N="TimeCreated">2014-08-15T17:53:57+04:00</DT>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
        </MS>
      </Obj>
      <Obj RefId="4">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\taskeng.exe</S>
          <S N="ProcessId">0x17a0</S>
          <DT N="TimeCreated">2014-08-15T17:01:00+04:00</DT>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
        </MS>
      </Obj>
      <Obj RefId="5">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Users\MikhailovNE\AppData\Roaming\SaveSense\UpdateProc\UpdateTask.exe</S>
          <S N="ProcessId">0x16bc</S>
          <DT N="TimeCreated">2014-08-15T16:56:00+04:00</DT>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
        </MS>
      </Obj>
      <Obj RefId="6">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4688</I32>
          <S N="NewProcessName">C:\Users\MikhailovNE\AppData\Roaming\SaveSense\UpdateProc\UpdateTask.exe</S>
          <S N="ProcessId">0x17a0</S>
          <DT N="TimeCreated">2014-08-15T16:56:00+04:00</DT>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <S N="NewProcessId">0x16bc</S>
        </MS>
      </Obj>
    </Objs>

    КОД

      try
                {
                    XmlTextReader xmlFile;
                    XmlTextReader xmlFile2;
                    xmlFile = new XmlTextReader("D:\\test\\HQ\\файл1.xml");                          
                    xmlFile2 = new XmlTextReader("D:\\test\\HQ\\файл2.xml");

                    DataSet ds = new DataSet();
                    DataSet ds2 = new DataSet();
                    ds.ReadXml(xmlFile);
                    ds2.ReadXml(xmlFile2);

                     int intMainTBL = ds.Tables[1].Rows.Count;  //число объектов в исходном файле
                     int intMergeTBL = ds2.Tables[1].Rows.Count; // число объектов в прикрепляемом файле

                  
                     for (int i = 0; i < intMergeTBL; i++)
                     {
                         string str2 = ds2.Tables[1].Columns[1].ColumnName;
                         txtShema.Text = ds2.Tables[1].Rows[i][1].ToString();
                         ds2.Tables[1].Rows[i][1] =  (intMainTBL+i).ToString();
                     }
                     //ds.WriteXml("D:\\test\\HQ-WS.xml");
                     //ds2.WriteXml("D:\\test\\HQ-WS2.xml");
                     ds.Merge(ds2);
                    ds.WriteXml("D:\\test\\HQ-WS_FIN.xml");
                   
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                } 
            }

    на на выход получаем задвоения, а не последовательную склейку

    <?xml version="1.0" standalone="yes"?>
    <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
      <Obj RefId="3">
        <TN RefId="0">
          <T>System.Management.Automation.PSCustomObject</T>
          <T>System.Object</T>
          <T>System.Management.Automation.PSCustomObject</T>
          <T>System.Object</T>
        </TN>
        <MS>
          <I32 N="ID">4689</I32>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\taskeng.exe</S>
          <S N="ProcessId">0x11c4</S>
          <S N="Computer">HQ-WS004021.rzdp.ru</S>
          <S N="UserName">markelovve</S>
          <S N="ProcessName">C:\Windows\System32\taskeng.exe</S>
          <S N="ProcessId">0x7e4</S>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <DT N="TimeCreated">2014-08-15T18:36:00+04:00</DT>
          <DT N="TimeCreated">2014-08-15T18:01:00+04:00</DT>
        </MS>
      </Obj>
      <Obj RefId="4">
        <TNRef RefId="0" />
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\dllhost.exe</S>
          <S N="ProcessId">0xef8</S>
          <S N="Computer">HQ-WS004021.rzdp.ru</S>
          <S N="UserName">markelovve</S>
          <S N="ProcessName">C:\Users\MikhailovNE\AppData\Roaming\SaveSense\UpdateProc\UpdateTask.exe</S>
          <S N="ProcessId">0x17bc</S>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <DT N="TimeCreated">2014-08-15T17:51:43+04:00</DT>
          <DT N="TimeCreated">2014-08-15T17:56:00+04:00</DT>
        </MS>
      </Obj>
      <Obj RefId="5">
        <TNRef RefId="0" />
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <I32 N="ID">4688</I32>
          <S N="ProcessName">C:\Windows\System32\taskeng.exe</S>
          <S N="ProcessId">0x23b4</S>
          <S N="Computer">HQ-WS004021.rzdp.ru</S>
          <S N="UserName">markelovve</S>
          <S N="NewProcessName">C:\Users\MikhailovNE\AppData\Roaming\SaveSense\UpdateProc\UpdateTask.exe</S>
          <S N="ProcessId">0x7e4</S>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <S N="NewProcessId">0x17bc</S>
          <DT N="TimeCreated">2014-08-15T17:36:00+04:00</DT>
          <DT N="TimeCreated">2014-08-15T17:56:00+04:00</DT>
        </MS>
      </Obj>
      <Obj RefId="6">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\dllhost.exe</S>
          <S N="ProcessId">0x1720</S>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <DT N="TimeCreated">2014-08-15T17:53:57+04:00</DT>
        </MS>
      </Obj>
      <Obj RefId="7">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Windows\System32\taskeng.exe</S>
          <S N="ProcessId">0x17a0</S>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <DT N="TimeCreated">2014-08-15T17:01:00+04:00</DT>
        </MS>
      </Obj>
      <Obj RefId="8">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4689</I32>
          <S N="ProcessName">C:\Users\MikhailovNE\AppData\Roaming\SaveSense\UpdateProc\UpdateTask.exe</S>
          <S N="ProcessId">0x16bc</S>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <DT N="TimeCreated">2014-08-15T16:56:00+04:00</DT>
        </MS>
      </Obj>
      <Obj RefId="9">
        <TNRef RefId="0" />
        <MS>
          <I32 N="ID">4688</I32>
          <S N="NewProcessName">C:\Users\MikhailovNE\AppData\Roaming\SaveSense\UpdateProc\UpdateTask.exe</S>
          <S N="ProcessId">0x17a0</S>
          <S N="Computer">HQ-WS005235.rzdp.ru</S>
          <S N="UserName">MikhailovNE</S>
          <S N="NewProcessId">0x16bc</S>
          <DT N="TimeCreated">2014-08-15T16:56:00+04:00</DT>
        </MS>
      </Obj>
    </Objs>

    17 августа 2014 г. 17:16

Все ответы