从XML - c#打印数组

本文关键字:打印 数组 XML | 更新日期: 2023-09-27 18:02:59

我正在处理XML数据,我想做的是;

  • 用户从下拉列表中选择名称值

  • 对于具有上述名称的每个节点,将值添加到列表

  • 列表然后转换为字符串数组

  • **打印要测试的数组,没有输出

  • 字符串数组转换为int数组(允许计算)数组)

  • **打印又没有输出

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

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>

从XML - c#打印数组

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

你是指/root/row/var[@name=' Cabin']还是/root/row[var/@name=' Cabin'](如果你想要<row>元素;虽然看看你的代码,情况并非如此)。


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

示例XML中name的属性值是" Cabin" -注意前导空格。

XPath查询中针对name测试的属性值是"Cabin" -没有前导空格。

所以你永远找不到任何节点

查看此问题的一般答案是在创建节点列表后立即设置一个断点,并在该点检查内容。

进一步说一下,如果可以的话,使用Linq to XML要愉快得多。

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

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

另外,您应该检查您的数组是否在调试模式下填充。