使用C#我有一个像
这样的XML文件<?xml version="1.0" encoding="utf-8"?>
<root>
<Account>
<name>Jani</name>
</Account>
</root>
我还有一个函数来读取名称节点:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("lib//user.xml");
XmlNode node;
node = xmlDoc.DocumentElement;
string name = node.Attributes[0].Value;
label1.Text = name.ToString();
但是我的索引超出范围错误:
你能告诉我为什么会这样吗?
答案 0 :(得分:4)
node = xmlDoc.DocumentElement;
string name = node.Attributes[0].Value;
node
是您的 root 节点。看起来像这样:
<root>
它有多少属性?没有,事实证明。 XML中的属性是这些bar="baz"
内容之一:
<foo bar="baz">
node.Attributes[0]
指的是第一个属性。没有第一个属性,没有第二个属性 - 您根本没有使用此XML中的属性。因此,这超出了范围。空集合中没有第一个项目。
你想要的是一个名为name
的元素,它在你的XML树中更远。
可能这个:
var node = xmlDoc.DocumentElement.SelectSingleNode("/root/Account/name");
然后,您想要node.InnerText
查看"Jani"
的内容。
答案 1 :(得分:1)
您正在尝试阅读node.Attributes[0].Value
但您的示例XML文件中没有任何属性。不确定确切的语法,但它应该更接近node.Value
答案 2 :(得分:1)
正如其他答案所述,您当前的XML没有属性。
private void DoIt()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"M:\StackOverflowQuestionsAndAnswers\38924171\38924171\data.xml");
XmlNode node;
node = xmlDoc.DocumentElement;
//string name = node.Attributes[0].Value;
string name = node["Account"].InnerText;
}
如果你的XML确实有属性
<?xml version="1.0" encoding="utf-8"?>
<root>
<Account name="Jani" />
</root>
然后你可以这样做:
private void DoItAgain()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"M:\StackOverflowQuestionsAndAnswers\38924171\38924171\data2.xml");
XmlNode node;
node = xmlDoc.DocumentElement;
string name = node["Account"].Attributes[0].Value;
}