2016-03-02 3 views
1

У меня есть два xml, которые просто так говорят. Как нижеслияние xml на основе условий

XML:

<APPLICATION> 
    <AC> 
      <CLASS Name="Hello1" Capt="do1"/> 
      <CLASS Name="Hello2" Capt="do2"/> 
      <CLASS Name="Hello5" Capt="do5"/> 
      <CLASS Name="Hello8" Capt="do8"/> 
    </AC> 

    <BO> 
      <ITEM Id="1" DefaultValue="name1"/> 
      <ITEM Id="3" DefaultValue="name3"/> 
      <ITEM Id="11" DefaultValue="name11"/> 
      <ITEM Id="12" DefaultValue="name12"> 
        <VAL> 
          <REASON Id="Job1" SecondOne="Hallo"/> 
        </VAL> 
      </ITEM> 
    </BO> 

xml2:

<APPLICATION> 
    <AC> 
      <CLASS Name="Hello1" Capt="dodo1"/> 
      <CLASS Name="Hello2" Capt="dodo2"/> 
      <CLASS Name="Hello3" Capt="dodo3"/> 
      <CLASS Name="Hello9" Capt="dodo9"/> 
    </AC> 
    <CARS Wheel="Fore" Default="45x255xZ"/> 
    <CARS Wheel="BACK" Default="45x255xZ"/> 
    <CARS Wheel="SPARE" Default="45x255xZ"/> 
    <BO> 
      <ITEM Id="1" DefaultValue="namename1"/> 
      <ITEM Id="3" DefaultValue=""/> 
      <ITEM Id="9" DefaultValue="name11"/> 
      <ITEM Id="10" DefaultValue="name12"> 
        <VAL> 
          <REASON Id="Job1" SecondOne="Hallo"/> 
        </VAL> 
      </ITEM> 
    </BO> 

Мне нужен выход, как показано ниже:

Условие: Я хочу условие на Id, такой путь - Когда два 'ID' на разных XMl равны, независимо от других атрибутов. Значения одинакового идентификатора должны быть напечатаны как одно независимо от их атрибутов (независимо от того, отличаются они или нет). Мне нужно вывод, как показано ниже

MergedXml:

<APPLICATION> 
     <AC> 
      <CLASS Name="Hello1" Capt="do1"/> 
      <CLASS Name="Hello2" Capt="do2"/> 
      <CLASS Name="Hello5" Capt="do5"/> 
      <CLASS Name="Hello8" Capt="do8"/> 
      <CLASS Name="Hello1" Capt="dodo1"/> 
      <CLASS Name="Hello2" Capt="dodo2"/> 
      <CLASS Name="Hello3" Capt="dodo3"/> 
      <CLASS Name="Hello9" Capt="dodo9"/> 
     </AC> 
     <CARS Wheel="Fore" Default="45x255xZ"/> 
     <CARS Wheel="BACK" Default="45x255xZ"/> 
     <CARS Wheel="SPARE" Default="45x255xZ"/> 
     <BO> 
      <ITEM Id="1" DefaultValue="name1"/> 
      <ITEM Id="3" DefaultValue="name3"/> 
      <ITEM Id="11" DefaultValue="name11"/> 
      <ITEM Id="12" DefaultValue="name12"> 
      <ITEM Id="9" DefaultValue="name11"/> 
      <ITEM Id="10" DefaultValue="name12"> 
     </BO> 

Мне нужно написать в C#

+0

Что вы пытались? Почему он помечен как C# и VB.Net, когда вам нужно написать его на C#? –

+0

Я тоже возьму VB. – Chennuri

ответ

0

Хорошо, это вы должны получить на стадионах.

Dim x1 As XElement 
    Dim x2 As XElement 
    x1 = <APPLICATION> 
      <AC> 
       <CLASS Name="Hello1" Capt="do1"/> 
       <CLASS Name="Hello2" Capt="do2"/> 
       <CLASS Name="Hello5" Capt="do5"/> 
       <CLASS Name="Hello8" Capt="do8"/> 
      </AC> 

      <BO> 
       <ITEM Id="1" DefaultValue="name1"/> 
       <ITEM Id="3" DefaultValue="name3"/> 
       <ITEM Id="11" DefaultValue="name11"/> 
       <ITEM Id="12" DefaultValue="name12"> 
        <VAL> 
         <REASON Id="Job1" SecondOne="Hallo"/> 
        </VAL> 
       </ITEM> 
      </BO> 
     </APPLICATION> 

    x2 = <APPLICATION> 
      <AC> 
       <CLASS Name="Hello1" Capt="dodo1"/> 
       <CLASS Name="Hello2" Capt="dodo2"/> 
       <CLASS Name="Hello3" Capt="dodo3"/> 
       <CLASS Name="Hello9" Capt="dodo9"/> 
      </AC> 
      <CARS Wheel="Fore" Default="45x255xZ"/> 
      <CARS Wheel="BACK" Default="45x255xZ"/> 
      <CARS Wheel="SPARE" Default="45x255xZ"/> 
      <BO> 
       <ITEM Id="1" DefaultValue="namename1"/> 
       <ITEM Id="3" DefaultValue=""/> 
       <ITEM Id="9" DefaultValue="name11"/> 
       <ITEM Id="10" DefaultValue="name12"> 
        <VAL> 
         <REASON Id="Job1" SecondOne="Hallo"/> 
        </VAL> 
       </ITEM> 
      </BO> 
     </APPLICATION> 

    Dim ie As IEnumerable(Of XElement) 
    ie = From x1id In x1.<BO>.<ITEM>, x2id In x2.<BO>.<ITEM> 
     Where [email protected] = [email protected] 
     Select x2id 

    If ie.Count > 0 Then 
     ie.Remove() 
     x1.<AC>.LastOrDefault.Add(x2.<AC>.Elements) 
     x1.<AC>.LastOrDefault.AddAfterSelf(x2.<CARS>) 
     x1.<BO>.LastOrDefault.Add(x2.<BO>.Elements) 
    End If 
+0

Благодарим вас за ответ. Это поможет с моей стороны. – Chennuri

Смежные вопросы