2011-07-19 86 views
0

在使用XML数据的过程中,我试图做的是什么;从XML打印数组 - C#

  • 用户从一个DropDownList

  • 用于与上述名称的每个节点选择名称值,值被添加到列表然后

  • 列表转换为字符串数组

  • **打印阵列进行测试,没有输出

  • 将字符串数组转换为int arra Y(允许在 阵列计算)

  • **打印不提供输出再次

这里是我已经生成的代码,我没有得到任何错误,只是没有输出,所以我不能告诉我们,如果数组已填充。

if (DropDownList1.SelectedItem.Text=="Cabin") 
{ 
    //Load XML document 
    XmlDocument xml = new XmlDocument(); 
    xml.LoadXml(Server.MapPath("~/Upload/" + FileUpload1.FileName)); 
    // xnList = nodes -> rows with Cabin 
    XmlNodeList xnList = xml.SelectNodes("/root/row[@name='Cabin']"); 

    //create a string list 
    List<string> strvalues = new List<string>(); 
    //populate list with values @ node Cabin 
    foreach (XmlNode xn in xnList) 
    { 
     strvalues.Add(xn["value"].InnerText); 
    } 

    //convert list to array 
    strvalues.ToArray(); 
    for (int i = 0; i < 2; i++) 
    { 
     //print array 
     Console.WriteLine(strvalues[i]); 
    } 
    //convert string array to int array for data manipulation 
    int[] values = strvalues.Select(x => int.Parse(x)).ToArray(); 
    for (int i = 0; i < values.Length; i++) 
    { 
     //print array 
     Console.WriteLine(values[i]); 
    } 
} 

这里还是XML文件的一部分;

<root> 
    <row> 
    <var name="Name" value="Garcia" /> 
    <var name=" Surname" value=" Jose" /> 
    <var name=" Country" value=" Cuba" /> 
    <var name=" Job" value="Software Developer" /> 
    <var name=" Cabin" value="345" /> 
    </row> 
    <row> 
    <var name="Name" value="Lenon" /> 
    <var name=" Surname" value="Tim" /> 
    <var name=" Country" value="USA" /> 
    <var name=" Job" value="SoftwareDeveloper" /> 
    <var name=" Cabin" value="444" /> 
    </row> 
</root> 

回答

0

您是否有与您的解决方案关联的控制台窗口?我认为你使用的是UI,并且没有控制台窗口(所以Console.WriteLine不会输出任何内容)。您可以将一个,但对于调试,我可以建议的Debug.WriteLine:

http://www.dotnetperls.com/debug-write

此外,你应该检查是否在调试模式正在填充您的阵列。

1

示例XML中名称的属性值为“Cabin” - 请注意前导空格。

在XPath查询中针对名称测试的属性值是“Cabin” - 没有前导空格。

所以你从来没有找到任何节点。

查看此问题的一般答案是在创建节点列表之后立即设置断点并检查该点处的内容。另外,Linq to XML如果可以提供给您,那么使用XML会更加愉快。

2

您的XPath表达式是错误的,因为<row>元素没有名为name的属性(并且它也缺少实际名称属性值中的空格)。

你的意思是/root/row/var[@name=' Cabin']或者可能是/root/row[var/@name=' Cabin'](如果你想要<row>元素;虽然看你的代码不是这种情况)。


此外,该行strvalues.ToArray()什么也不做,因为你不分配结果的任何东西。 ToArray不会修改列表,它会返回一个与列表内容相同的新数组。在此代码中没有真正的理由将列表转换为数组。

+0

感谢您指出间距问题,原因是我将一个.csv文件转换为XML,所以显然有一个我忽略的间距问题。至于转换为数组我需要能够传递一个数组数组,所以我只是认为最好将列表转换为int数组最终 – user123

+0

将其转换为int数组的代码很好,这是以前对'strvalues.ToArray()'的调用,它是多余的(并且没有效果,因为就像我所说的,你忽略了返回值)。 – Sven