XML issue with array indexing

<?xml version="1.0" encoding="ISO-8859-1"?>
<servers>  
  <server serverid="server1" asset="Sample" >
    <port portid ="port1" asset="Sample"  ></port>  
    <port portid ="port2" asset="Sample"  ></port>      
  </server>

  <server serverid="server2" asset="Sample" >
    <port portid ="port1" asset="Sample"  ></port> 
    <port portid ="port2" asset="Sample"  ></port>    
    <port portid ="port3" asset="Sample"  ></port>
    <port portid ="port4" asset="Sample"  ></port>        
  </server>
<server serverid="server1" asset="Sample" >
    <port portid ="port1" asset="Sample"  ></port> 
    <port portid ="port2" asset="Sample"  ></port>    
    <port portid ="port3" asset="Sample"  ></port>   
  </server>

</servers>  

I am trying to add Server XElements and port XElements to the existing XML DOC.I tried the following code,

int[] test = new int[3];
string[] PortName1 = new string[3];
string[] PortId1 = new string[3];
PortName1[0]="portname1";
PortName1[1] = "portname2";
PortName1[2] = "portname3";

PortId1[0] = "port1";
PortId1[1] = "port2";
PortId1[2] = "port3";
var fileName = @"C:\sample.xml";
var xdoc = XDocument.Load(fileName);

var server = 
    new XElement("server",
        new XAttribute("serverid", ServerId),
        new XAttribute("name", ServerName),
            test.Select(sample =>
                new XElement("port",
                    new XAttribute("asset", PortName),
                    new XAttribute("portid", PortId)
                ))
        );

Everything is working fine,but the problem is PortName & PortId are string array variables.Dont know how to get indexed dynamic values for each iterate of "test".For me everytime it is getting the zero index values only.

Jon Skeet
people
quotationmark

If you're using .NET 4, you can just use Zip:

var server = 
    new XElement("server",
        new XAttribute("serverid", ServerId),
        new XAttribute("name", ServerName),
            PortName1.Zip(PortId1, (name, id) =>
                new XElement("port",
                    new XAttribute("asset", name),
                    new XAttribute("portid", id)
                ))
        );

If you're not using .NET 4 or later, you can implement Zip very easily in your own code - Eric Lippert has sample code in a blog post.

(As a side note, I'd encourage you to follow .NET naming conventions - I'd change the names of PortId1 and PortName1 to portIds and portNames for example.)

people

See more on this question at Stackoverflow