阅读XML文件的问题

时间:2016-08-12 18:15:14

标签: c# xml

使用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();

但是我的索引超出范围错误:

enter image description here

你能告诉我为什么会这样吗?

3 个答案:

答案 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;
    }