我正在处理的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);
}
答案 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
。