1

这是我创建 XML 文件的代码

public void CreateXml(string[] names, string[] values, string type)
{
        XElement xml = new XElement("Transaction",
            new XElement("TransactionType", type));
        foreach (var i in names)
        {
            foreach (var o in values)
            {
                xml.Add(new XElement(i.Replace(" ", string.Empty), o));
            }
        }
        xml.Save("C:\\Users\\PHWS13\\Desktop\\sample.xml");
}

我的输出看起来像这样

<?xml version="1.0" encoding="UTF-8"?>
<Transaction> 
    <TransactionType>Void</TransactionType> 
    <Zip>1</Zip>
     <Zip>2</Zip> 
     <PNRef>1</PNRef> 
     <PNRef>2</PNRef> 
 </Transaction>

但这是不对的,我期待更多这样

<?xml version="1.0" encoding="UTF-8"?>
<Transaction> 
    <TransactionType>Void</TransactionType> 
    <Zip>1</Zip>
     <PNRef>2</PNRef> 
 </Transaction>

正如我注意到的值是正确的,但我只是重复,我该如何解决这个问题?

string[] textBoxNamesArray = flowLayoutPanelText.Controls.OfType<TextBox>()
                                  .Select(r => r.Name)
                                  .ToArray();

string[] textBoxTextsArray = flowLayoutPanelText.Controls.OfType<TextBox>()
                                  .Select(r => r.Text)
                                  .ToArray();
4

3 回答 3

4

那么你不应该使用两个嵌套循环:两个嵌套循环创建一个笛卡尔积(即每个名称都与每个值配对)。

如果您使用同时遍历名称和值的单个循环,您将获得预期的输出。

如果您使用的是 .NET 4,则可以使用Zip如下方法:

xml.Add(
    names
    .Zip(values, (n,v) => new XElement(n.Name(" ", string.Empty), v))
    .ToArray()
);
于 2012-12-03T05:23:33.137 回答
3

如果不知道如何在 2 个数组中构造数据,很难说,但我猜:

    for (int i = 0; i < names.Length; i++)
    {
        xml.Add(new XElement(names[i].Replace(" ", string.Empty), values[i]));
    }
于 2012-12-03T05:23:02.693 回答
2

用字典试试这个。

public void CreateXml(Dictionary<string, string> myNameValuePairs, string type)
{
    XElement xml = new XElement("Transaction",
        new XElement("TransactionType", type));
    foreach (var key in names)
    {
        xml.Add(new XElement(key.Replace(" ", string.Empty), myNameValuePairs[key]));
     }
    xml.Save("C:\\Users\\PHWS13\\Desktop\\sample.xml");
}

编辑:使用上述方法签名的解决方法。但是,只有当 values[i] 是 names[i] 的对应值时,这才有效。除非您确定数组长度以及名称和值的内容,否则我不会建议您这样做。

public void CreateXml(string[] names, string[] values, string type)
{
    XElement xml = new XElement("Transaction",
        new XElement("TransactionType", type));
    foreach (var i = 0; i < names.length; i++)
    {
        xml.Add(new XElement(names[i].Replace(" ", string.Empty), values[i]));
    }
    xml.Save("C:\\Users\\PHWS13\\Desktop\\sample.xml");
}
于 2012-12-03T05:30:28.323 回答