【问题标题】:Read xml with atrributes into treeview将带有属性的 xml 读入树视图
【发布时间】:2015-05-11 17:54:45
【问题描述】:

我一直在尝试将 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();
            }
        }

任何帮助将不胜感激:)

【问题讨论】:

  • 您还有这个问题吗?你能标记一个接受的答案吗? :)

标签: c# xml treeview


【解决方案1】:

XmlNode 有一个您需要处理的 Attributes 集合。 XmlNode 的子节点只是其中的 XmlNode。

尝试这样的方法将属性添加为 TreeNode。

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

希望这会有所帮助! :)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-12-23
      • 1970-01-01
      • 2018-11-20
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多