0

我有点问题。我正在尝试解析 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) 放在树视图中,我不希望这样。

4

2 回答 2

0

而不是使用 XmlTextReader 尝试使用

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

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

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

于 2012-06-22T20:46:51.983 回答
0
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", ""));
    }
}
于 2012-06-22T20:55:47.400 回答