字符串数组到XML

问题描述:

我在c#中有一个字符串数组,包含地址的行。阵列中最少有2行,最多4行。该数组需要转换为需要4个地址元素的XML查询。这是我如何做的,它的工作原理,但似乎应该有一个更有效的方法。字符串数组到XML

 switch (address.Length) 
     { 
      case 2: 
       address2[0] = ""; 
       address2[1] = ""; 
       address2[2] = address[0]; 
       address2[3] = address[1]; 
       break; 
      case 3: 
       address2[0] = ""; 
       address2[1] = address[0]; 
       address2[2] = address[1]; 
       address2[3] = address[2]; 
       break; 
      case 4: 
       address2[0] = address[0]; 
       address2[1] = address[1]; 
       address2[2] = address[2]; 
       address2[3] = address[3]; 
       break; 
      default: 
       MessageBox.Show("Invalid Address Block Length"); 
       break; 
     } 

这填充的第二字符串数组,最终创建XML等:

  "<ADDRESS0>" + address2[0] + "</ADDRESS0>" + 
      "<ADDRESS1>" + address2[1] + "</ADDRESS1>" + 
      "<ADDRESS2>" + address2[2] + "</ADDRESS2>" + 
      "<ADDRESS3>" + address2[3] + "</ADDRESS3>" 

的XML必须包含4个地址元素即使内文本是空的。

+0

有一整套的功能,称为[LINQ到XML(https://msdn.microsoft.com/en-us/library/ bb387098.aspx),它可以让你“查询”你的xml。它也可以帮助构建XML。 – ryanyuyu

这是确实通过字符串连接创建XML不是一个好主意。你搞砸在某些时候。

你可以使用LINQ到XML创建你的元素,填充有ň多余的空行排列在前面,让你4总数:

string[] address = {"first", "second", "third"}; 

var extra = Math.Max(0, 4 - address.Length); 

var elements = Enumerable.Repeat("", extra) 
    .Concat(address) 
    .Select((line, index) => new XElement("ADDRESS" + index, line)); 

输出:

<ADDRESS0></ADDRESS0> 
<ADDRESS1>first</ADDRESS1> 
<ADDRESS2>second</ADDRESS2> 
<ADDRESS3>third</ADDRESS3> 

看到一个工作演示在这里:https://dotnetfiddle.net/sRffH5

我认为这可能是最有效的事情,你可以在实际上做ge nerating值 - 但是,你也可以做一个循环:

var address = new string[]{ "a", "b", "c" }; 
var address2 = new string[]{ "", "", "", "" }; 

for (int i = 0; i < address.Length; i++) 
{ 
    address2[address2.Length - i - 1] = address[address.Length - i - 1]; 
}