从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>
您的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另外,您应该检查您的数组是否在调试模式下填充。