[英]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.