字符串数组到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个地址元素即使内文本是空的。
答
这是确实通过字符串连接创建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];
}
有一整套的功能,称为[LINQ到XML(https://msdn.microsoft.com/en-us/library/ bb387098.aspx),它可以让你“查询”你的xml。它也可以帮助构建XML。 – ryanyuyu