xml, linq, c#

How to add a new plan if state name = 'NJ' and type name = 'Term Life'? and carrier name = 'Mutual of Omaha' using c#?


plan name="test"
plan id = "123"
plan healthtier="test"

<Products>
	<State Name="NJ">
		<Type Name="Subsidized">
			<Carrier Name="Chip" ID="100000008">
				<Plan Name="Chip" ID="100000322" HealthTier="" />
			</Carrier>
		</Type>
		<Type Name="Term Life">
			<Carrier Name="Mutual of Omaha" ID="100000017">
				<Plan Name="Term Life Express" ID="100000259" HealthTier="" />
		 	</Carrier>
		</Type>
		
	</State>
<State Name="PA"> 
		<Type Name="In Market">
			<Carrier Name="2017 Capital Blue Cross" ID="100000134">
				<Plan Name="Silver PPO 4500/0/10" ID="100002633" HealthTier="Silver" />
		 	</Carrier>
			<Carrier Name="2017 Geisinger Health Plan" ID="100000135">
		 	</Carrier>
		 			
		</Type>
		<Type Name="Out Market">
			<Carrier Name="2017 Capital Blue Cross" ID="100000134">
				<Plan Name="Gold PPO 1000/0/20" ID="100002634" HealthTier="Gold" />
			</Carrier>
			<Carrier Name="2018 Capital Blue Cross" ID="948120063">
				<Plan Name="Gold PPO 1000/0/20" ID="100002634" HealthTier="Gold" />
			</Carrier>  
		</Type> 
		<Type Name="Term Life">
			<Carrier Name="Assurity" ID="100000005">
				<Plan Name="Non-Med Term 350" ID="100000230" HealthTier="" />
			</Carrier> 
		</Type> 
	</State>
</Products>

Open in new window

LVL 1
ITsolutionWizardAsked:
Who is Participating?
 
Fernando SotoRetiredCommented:
Hi ITsolutionWizard;

The following code snippet should do what you need. Please not that XML documents are case sensitive so a node name such as Plan needs to match the same case in code, so Plan is not the same as plan or any other combination of casing.
// Used to find node to insert new plan
string stateName = "NJ";
string typeName = "Term Life";
// Used to create new plan
string planName = "test";
string planId = "123";
string planHealthtier = "test";

// Load the XML from the file system
XDocument xdoc = XDocument.Load(@"C:\Working Directory\Products2.xml");

// Query to find node
var result = (from node in xdoc.Root.Elements("State")
              where node.Attribute("Name").Value == stateName &&
                    node.Elements("Type").Any(n => n.Attribute("Name").Value == typeName)
              select node.Elements("Type")
                         .Where(n => n.Attribute("Name").Value == typeName)
                         .Elements("Carrier").FirstOrDefault()).FirstOrDefault();

// Test to see if node was found to insert new plan 
if (result != null)
{
    // Create the node to be inserted
    XElement newPlan = new XElement("Plan",
        new XAttribute("Name", planName),
        new XAttribute("ID", planId),
        new XAttribute("HealthTier", planHealthtier)
        );

    // Insert the new plan into the XML document
    result.Add(newPlan);
    // Save the update XML document
    xdoc.Save("File path and name goes here");
    
}

Open in new window

The results of the above query is as follows. Please note the new Plan that was inserted.
<Products>
  <State Name="NJ">
    <Type Name="Subsidized">
      <Carrier Name="Chip" ID="100000008">
        <Plan Name="Chip" ID="100000322" HealthTier="" />
      </Carrier>
    </Type>
    <Type Name="Term Life">
      <Carrier Name="Mutual of Omaha" ID="100000017">
        <Plan Name="Term Life Express" ID="100000259" HealthTier="" />
        <Plan Name="test" ID="123" HealthTier="test" />
      </Carrier>
    </Type>
  </State>
  <State Name="PA">
    <Type Name="In Market">
      <Carrier Name="2017 Capital Blue Cross" ID="100000134">
        <Plan Name="Silver PPO 4500/0/10" ID="100002633" HealthTier="Silver" />
      </Carrier>
      <Carrier Name="2017 Geisinger Health Plan" ID="100000135"></Carrier>
    </Type>
    <Type Name="Out Market">
      <Carrier Name="2017 Capital Blue Cross" ID="100000134">
        <Plan Name="Gold PPO 1000/0/20" ID="100002634" HealthTier="Gold" />
      </Carrier>
      <Carrier Name="2018 Capital Blue Cross" ID="948120063">
        <Plan Name="Gold PPO 1000/0/20" ID="100002634" HealthTier="Gold" />
      </Carrier>
    </Type>
    <Type Name="Term Life">
      <Carrier Name="Assurity" ID="100000005">
        <Plan Name="Non-Med Term 350" ID="100000230" HealthTier="" />
      </Carrier>
    </Type>
  </State>
</Products>

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.