将带有属性的xml读入treeview

时间:2015-03-10 10:28:09

标签: c# xml treeview

我一直在尝试将XML读入treeView(并且大部分都成功),但是有一个问题:当标签具有属性时,它们不会被读取而树视图只会包含一个节点XML标记的名称,但不是它的属性:这是我的XML

<?xml version="1.0" encoding="utf-8"?>
<skiu:ikunk xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <economicalOperator>
        <id>BGNCA00003003</id>
    </economicalOperator>
    <ikunk id="1">
        <number>4</number>
        <name>КИНГС ТАБАКО ИНТЕРНЕШЪНЪЛ ЕАД</name>
        <certProvider>BTRUST</certProvider>
        <certAuthSn>10221954</certAuthSn>
        <certPin>5244</certPin>
        <description>Кингс Табако BGNCA00003003</description>
    </ikunk>
    <controllers>
        <number>1</number>
        <name>PLC</name>
        <description>FatekPLC</description>
        <templateCode>1</templateCode>
    </controllers>
    <tags>
        <templateEntryCode>T_TN</templateEntryCode>
        <name>Пореден номер на транзакцията</name>
    </tags>
</skiu_x003A_ikunk>

当我把它读到树视图中时,除了每个标签的属性外,我几乎可以获得所有预期的内容!

我的问题是如何使属性显示在各自的节点中,但是使用括号(),如下所示:第n个节点文本(第n个属性文本)

这是我对代码的阅读:

XmlDataDocument xmldoc = new XmlDataDocument();
                XmlNode xmlnode;
                FileStream fs = new FileStream(ofdXML.FileName, FileMode.Open, FileAccess.Read);
                xmldoc.Load(fs);
                xmlnode = xmldoc.ChildNodes[1];
                treeView1.Nodes.Clear();
                treeView1.Nodes.Add(new TreeNode(xmldoc.DocumentElement.Name));
                TreeNode tNode;
                tNode = treeView1.Nodes[0];
                AddNode(xmlnode, tNode);

和AddNode的代码:

private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
        {
            XmlNode xNode;
            TreeNode tNode;
            XmlNodeList nodeList;
            int i = 0;
            if (inXmlNode.HasChildNodes)
            {
                nodeList = inXmlNode.ChildNodes;
                for (i = 0; i <= nodeList.Count - 1; i++)
                {
                    xNode = inXmlNode.ChildNodes[i];
                    inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
                    tNode = inTreeNode.Nodes[i];
                    AddNode(xNode, tNode);
                }
            }
            else
            {
                inTreeNode.Text = inXmlNode.InnerText.ToString();
            }
        }

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

XmlNode有一个你需要解决的 Attributes 集合。 XmlNode的子项只是其中的XmlNodes。

尝试使用类似的方法将属性添加为TreeNode。

if (inXmlNode.Attributes.Any()) {
    foreach (XmlAttribute attribute in inXmlNode.Attributes) {
        String displayName = String.Format("({0})", attribute.Name)
        inTreeNode.Nodes.Add(new TreeNode(displayName));
    }
}

希望这有帮助! :)

答案 1 :(得分:0)

看看 https://msdn.microsoft.com/en-us/library/system.xml.xmlnode%28v=vs.110%29.aspx 你会看到属性存储在Attributes属性中,而不是ChildNodes属性中,所以如果你也检查这个集合你应该解决你的问题