C#应用程序不会在XML文档中显示最后一个属性值

时间:2015-02-25 20:04:25

标签: c# xml

我正在处理的C#项目不会在XML标记中显示/插入最后一个值。 例如,我的应用程序遍历此标记并将获得1,2 3但不是4.它会在每次迭代时执行此操作。

<purpose>
 <intendedUse id="1"/>
 <intendedUse id="2"/>
 <intendedUse id="3"/>
 <intendedUse id="4"/>
</purpose>

我认为它与int num声明有关。注意:我评论了我的sqlite命令,所以我不会写入数据库。我有一个消息框来显示值。

 for (i = 0; i < xmlnode.Count - 1; i++ )
            {
                str = xmlnode[i].Attributes[0].Value;
                int num = Int32.Parse(str) - 1;
                for ( var count = 0; count < xmlnode[num].FirstChild.NextSibling.ChildNodes.Count - 1; count++)
                {
                    str2 = xmlnode[num].FirstChild.NextSibling.ChildNodes[count].Attributes[0].Value; 
                    MessageBox.Show(str2);
                }

                //SQLiteCommand cmd = new SQLiteCommand(connection);
                //cmd.CommandText = "INSERT INTO languagePurpose (purposeID, languageID) VALUES ('" + str2 + "', '" + str + "')";
                //SQLiteDataReader dr = cmd.ExecuteReader();
               // MessageBox.Show(str);
            }

2 个答案:

答案 0 :(得分:3)

这可能不是您正在寻找的答案,但在Linq-to-XML中这很容易。让我们假设您将xml加载到名为&#34; xml&#34;的XDocument中。

for(XNode node in xml.Element("purpose").Elements("intendedUse"))
{
    //sets the value of the id attribute to str2
    str2 = node.Attribute("id").Value;
}

使用上述解决方案,如果存在no id属性,则可以NullReferenceException,或者没有&#34;目的&#34;节点,但从我的例子中可以很清楚这个概念。

显然你可以在那里做任何你想做的事情,但是LINQ-to-XML比XmlDocument更容易使用,特别是如果你正在尝试学习如何进行XML解析。

这是一个帮助您入门的链接:Linq-to-XML MSDN

答案 1 :(得分:1)

想出来。我应该删除

中的-1
count < xmlnode[num].FirstChild.NextSibling.ChildNodes.Count - 1`

直到@Nadia为我的第一个for循环提出它并没有注意到,我没有注意到我按习惯添加了-1