Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从XML-C打印数组#_C#_Xml_Printing_Methods - Fatal编程技术网

C# 从XML-C打印数组#

C# 从XML-C打印数组#,c#,xml,printing,methods,C#,Xml,Printing,Methods,Im正在处理XML数据,而我试图做的是 用户从下拉列表中选择名称值 对于具有上述名称的每个节点,值将添加到列表中 列表然后转换为字符串数组 **打印要测试的阵列时,未给出任何输出 字符串数组转换为int数组(允许在 阵列) **打印不再提供输出 这是我生成的代码,我没有收到错误,只是没有输出,所以我无法判断数组是否已填充 if (DropDownList1.SelectedItem.Text=="Cabin") { //Load XML document XmlDocumen

Im正在处理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]);
    }
}
if(DropDownList1.SelectedItem.Text==“CAB”)
{
//加载XML文档
XmlDocument xml=新的XmlDocument();
LoadXml(Server.MapPath(“~/Upload/”+FileUpload1.FileName));
//xnList=节点->带驾驶室的行
XmlNodeList xnList=xml.SelectNodes(“/root/row[@name='cab']”);
//创建一个字符串列表
List strvalues=new List();
//在节点处用值填充列表
foreach(xnList中的XmlNode xn)
{
添加(xn[“value”].InnerText);
}
//将列表转换为数组
strvalues.ToArray();
对于(int i=0;i<2;i++)
{
//打印阵列
Console.WriteLine(标准值[i]);
}
//将字符串数组转换为int数组以进行数据操作
int[]values=strvalues.Select(x=>int.Parse(x)).ToArray();
for(int i=0;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>

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


此外,您应该检查阵列是否以调试模式填充。

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


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

示例XML中name的属性值为“cab”-注意前导空格

在XPath查询中,根据名称测试的属性值为“CAB”-无前导空格

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

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


另一方面,如果您可以使用Linq to XML,那么使用Linq to XML会更愉快。

示例XML中name的属性值为“cab”-请注意前导空格

在XPath查询中,根据名称测试的属性值为“CAB”-无前导空格

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

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


另一方面,如果您可以使用Linq to XML,那么使用Linq to XML会更方便。

您的XPath表达式是错误的,因为
元素没有名为
name
的属性(而且它还缺少实际name属性值中的空格)

您是指
/root/row/var[@name='cab']
还是可能是
/root/row[var/@name='cab']
(如果您想要
元素,尽管查看您的代码并非如此)



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

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

您是指
/root/row/var[@name='cab']
还是可能是
/root/row[var/@name='cab']
(如果您想要
元素,尽管查看您的代码并非如此)



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

感谢您指出间距问题。原因是我将.csv文件转换为XML,因此显然我忽略了间距问题。至于转换为数组,我需要能够传入一个数据数组,所以我认为最好最终将列表转换为一个int数组。将其转换为
int
数组的代码很好,之前调用
strvalues.ToArray()
是多余的(并且没有效果,因为正如我所说,您忽略了返回值)。感谢您指出间距问题。原因是我将.csv文件转换为XML,因此我显然忽略了间距问题。至于转换为数组,我需要能够传入一个数据数组,因此我认为最好最终将列表转换为int数组,将代码转换为
int
数组很好,之前调用
strvalues.ToArray()
是多余的(并且没有效果,因为正如我所说,您忽略了返回值)。