繁体   English   中英

将数据从XML文件提取到TreeView项(C#)

[英]Pulling data from an XML file into a TreeView item (C#)

我有一个问题。 我试图解析XML文件并将其内容放入TreeView中。 我几乎一切正常,但是我遇到一件事的问题。

这是XML文件的示例:

<AnswerIt>

    <category name="Category 1">
        <question is="Question 1">
            <answer couldbe="Answer 1" />
            <answer couldbe="Answer 2" />
        </question>
    </category>

    <category name="Category 2">
        <question is="Question 1">
            <answer couldbe="Answer 1" />
        </question>
        <question is="Question 2">
            <answer couldbe="Answer 1" />
        </question>
    </category>

</AnswerIt>

我用来处理XML文件的代码可以很好地提取所有类别。 当涉及到问题部分时,它会拉出第一个问题,但之后不会再提。 只要所有答案都属于第一个问题,就可以将所有答案拉得很好。 这是我的C#代码:

public void LoadQuestionDatabase()
    {
        XmlTextReader reader = new XmlTextReader("http://localhost/AnswerIt.xml");


        TreeNode node = new TreeNode();
        TreeNode subnode = new TreeNode();

        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element && reader.Name == "category")
            {
                node = lstQuestions.Nodes.Add(reader.GetAttribute(0));
                categories.Add(reader.GetAttribute(0));


                while (reader.NodeType != XmlNodeType.EndElement)
                {
                    reader.Read();
                    if (reader.Name == "question")
                    {
                       subnode = node.Nodes.Add(reader.GetAttribute(0));
                        questions.Add(reader.GetAttribute(0));

                        while (reader.NodeType != XmlNodeType.EndElement)
                        {
                            reader.Read();
                            if (reader.Name == "answer")
                            {
                                // add each answer
                                subnode.Nodes.Add(reader.GetAttribute(0).Replace("\t", ""));
                            }
                        }
                    }
                }

            }

        }
        reader.Close();
    }

我不是很擅长C#,我猜想它并没有遍历所有问题并添加它们。 有什么想法我做错了吗? 我可以阅读的任何内容可以帮助我吗? 我阅读的每个示例都将根节点(AnswerIt)放在树形视图中,我不希望这样。

而不是使用XmlTextReader尝试使用

XDocument doc = XDocument.Load("http://localhost/AnswerIt.xml");

那么您不必手动构造所有元素。

XDocument在System.Xml.Linq程序集和名称空间中提供。 一旦将其加载到XDocument中,您就可以使用其任何内置方法来操纵数据。

var xDocument = XDocument.Load("http://localhost/AnswerIt.xml");

foreach (var element in xDocument.Descendants("category"))
{
    var node = lstQuestions.Nodes.Add(element.Attribute("name").Value);
    foreach (var subElement in element.Elements("question"))
    {
        var subnode = node.Nodes.Add(subElement.Attribute("is").Value);
        foreach (var answer in subElement.Elements("answer"))
            subnode.Nodes.Add(answer.Attribute("couldbe")
                   .Value.Replace("\t", ""));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM