[英]Reading a complex XML file in C# (Unity3d)
我在Unity中使用c#读取XML文档时遇到了很大的麻烦。 我尝试读取的XML具有如下结构:
<Classes A>
<Class A></Class A>
<Class A></Class A>
<Class A></Class A>
<Class A>
<Detail X>
<Detail Y>
</Class A>
<Class A>
(...)
有时,A级有孩子; 有时,A类是另一个A类的孩子,等等。
我已经尝试和研究了2天,但是我无法理解如何使用System.XML或System.XML.Linq进行阅读
我可以使用XDocument.Read()读取所有的Elements及其属性,但是我无法获得有关它们是由另一个类继承还是自己有孩子的任何信息。 我如何阅读一个元素然后让它检查是否有任何孩子以及是否
a)有孩子,继续阅读孩子
要么
b)没有孩子,继续阅读下一个元素。
我了解XNode大概包含我想要的信息。 我也能够阅读所有XNode。 但是我无法将任何XNode强制转换为XElement,反之亦然。 这些功能均未达到我的预期。
样本XML
<?xml version="1.0" encoding="utf-8" ?>
<Classes A="1">
<Class A="1.1"/>
<Class A="1.2">
<Detail X="1.2.1"/>
</Class>
<Class A="1.3">
<Detail X="1.3.1"/>
<Detail Y="1.3.2"/>
</Class>
<Class A="1.4"/>
</Classes>
C#代码
public void XMLToTreeView()
{
var reader = XmlReader.Create(@"Path\Sample.xml");
var xElement = XElement.Load(reader);
reader.Close();
findAllNodes(xElement, treeView1);
}
private void findAllNodes(XElement xElement, TreeView treeView)
{
TreeNode ParentNode = treeView.Nodes.Add(xElement.Attributes().FirstOrDefault().Value);
foreach (XElement childElement in xElement.Elements())
{
TreeNode node = new TreeNode();
node.Text = childElement.Attributes().FirstOrDefault().Value;
ParentNode.Nodes.Add(node);
findAllNodes(childElement, node);
}
}
private void findAllNodes(XElement xElement, TreeNode node)
{
foreach (XElement childElement in xElement.Elements())
{
TreeNode childNode = new TreeNode();
childNode.Text = childElement.Attributes().FirstOrDefault().Value;
node.Nodes.Add(childNode);
findAllNodes(childElement, childNode);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.