读xml文件生成树

      你去建两张表把这目录做成树的形式吧,这有个例子给你。

      我把那树的结构写在xml中行不行?

      行,你自己看着办。

      靠,每次都是这样让我拿着那半成品在改,真是受不了。开始又不把它写成树的形式现在来让我改,无语。被这个纠结的项目整的郁闷死了。今天又提出新的需求了,领导要看到系统在线的人数,还要了解他们在用那些应用。citrix中也不知道有没有给出接口,研究了一上午得出的结论却不容乐观,citrix上给出的性能方面的数据却不是我想要的,杯具啊。

      这是我建的一个xml的树形结构

 

<?xml version="1.0" encoding="utf-8" ?>

<Tree>

  <parentNode name="父节点1" icon="~/images/dw.gif" url="flgl/ClassManager.aspx" target="iFrameInfo"></parentNode>

  <parentNode name="父节点2" icon="~/images/dw.gif" url="flgl/Sec_class.aspx" target="iFrameInfo"></parentNode>

  <parentNode name="父节点3" icon="~/images/dw.gif" url="AppIconList/AppIconList.aspx" target="iFrameInfo"></parentNode>

  <parentNode name="父节点4" icon="~/images/dw.gif" url="">

    <childNode name="子节点1" icon="~/images/dw.gif" url="ipgl/ServerAdressManager.aspx" target="iFrameInfo"></childNode>

    <childNode name="子节点2" icon="~/images/dw.gif" url="ipgl/ZDCAdressManager.aspx" target="iFrameInfo"></childNode>

  </parentNode>

  <parentNode name="父节点5" icon="~/images/dw.gif" url="AppList.aspx" target="_parent"></parentNode>

</Tree>

 

我现在要做的是将他的结构写到树里去,下面是读取xml和将它添加到树中去。

   //循环他的所有节点并添加到树中去

 

    protected void CreateTree()

    {

 

        XmlDocument xmlDoc = new XmlDocument();

        string xmlPath = AppDomain.CurrentDomain.BaseDirectory + "tree.xml";

        xmlDoc.Load(xmlPath);

        XmlNodeList nodeList = xmlDoc.SelectSingleNode("Tree").ChildNodes;

        //XmlNodeList nodeList = xmlDoc.SelectNodes("@name[//parentNode]");

        //TreeNode rootNode = new TreeNode("geng");

        //TreeView1.Nodes.Add(rootNode);

        try

        {

            TreeView1.Nodes.Clear();//清除树控件中所有节点

            foreach (XmlNode xn in nodeList)

            {

                XmlElement xe = (XmlElement)xn;

                string str = xe.GetAttribute("name");

                string strIcon = xe.GetAttribute("icon");

                string strUrl = xe.GetAttribute("url");

                string strTarget = xe.GetAttribute("target");

                TreeNode tn = new TreeNode(str);

                tn.ImageUrl = strIcon;

                if (!strUrl.Equals(""))

                {

                    tn.NavigateUrl = strUrl;

                }

                tn.Target = strTarget;

                TreeView1.Nodes.Add(tn);

 

                XmlNodeList childNodeList = xn.ChildNodes;

                foreach (XmlNode cxn in childNodeList)

                {

                    XmlElement cxe = (XmlElement)cxn;

                    string str2 = cxe.GetAttribute("name");

                    string strUrl2 = cxe.GetAttribute("url");

                    string strTarget2 = cxe.GetAttribute("target");

                    TreeNode tnChild = new TreeNode(str2, str2);

                    if(!strUrl2.Equals(""))

                    {

                        tnChild.NavigateUrl = strUrl2;

                    }

                    tnChild.Target = strTarget2;

                    tn.ChildNodes.Add(tnChild);

                }

            }

            TreeView1.CollapseAll();

        }

        catch

        {

 

        }

    }

 

    //用递归方法循环xml中的节点生成树

    protected void CreateNewTree()

    {

        XmlDocument xmlDoc = new XmlDocument();

        string xmlPath = AppDomain.CurrentDomain.BaseDirectory + "tree.xml";

        xmlDoc.Load(xmlPath);

        XmlNodeList nodeList = xmlDoc.SelectSingleNode("Tree").ChildNodes;

        TreeView1.Nodes.Clear();//清除树控件中所有节点

        try

        {

            foreach (XmlNode xn in nodeList)

            {

                XmlElement xe = (XmlElement)xn;

                string str = xe.GetAttribute("name");

                string strIcon = xe.GetAttribute("icon");

                string strUrl = xe.GetAttribute("url");

                string strTarget = xe.GetAttribute("target");

                TreeNode tn = new TreeNode(str);

                tn.ImageUrl = strIcon;

                if (!strUrl.Equals(""))

                {

                    tn.NavigateUrl = strUrl;

                }

                tn.Target = strTarget;

                TreeView1.Nodes.Add(tn);

 

                XmlNodeList childNodeList = xn.ChildNodes;

                bianliAllNode(tn, childNodeList);

            }

        }

        catch

        {

 

        }

        TreeView1.CollapseAll();

    }

 

    //递归循环所有节点

    private void bianliAllNode(TreeNode rtn, XmlNodeList nodeList) 

    {

        try

        {

            foreach (XmlNode xn in nodeList)

            {

                XmlElement xe = (XmlElement)xn;

                string str = xe.GetAttribute("name");

                string strIcon = xe.GetAttribute("icon");

                string strUrl = xe.GetAttribute("url");

                string strTarget = xe.GetAttribute("target");

                TreeNode tn = new TreeNode(str);

                tn.ImageUrl = strIcon;

                if (!strUrl.Equals(""))

                {

                    tn.NavigateUrl = strUrl;

                }

                tn.Target = strTarget;

                rtn.ChildNodes.Add(tn);

 

                XmlNodeList childNodeList = xn.ChildNodes;

                bianliAllNode(tn, childNodeList);

            }

        }

        catch

        {

 

        }

    }

页面中的代码:

 

<asp:TreeView ID="TreeView1" runat="server" ImageSet="WindowsHelp" NodeIndent="10" Width="149px" ShowLines="True" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" Height="79px">

                                        <ParentNodeStyle Font-Bold="True" ForeColor="black" ImageUrl="~/images/dw.gif" />

                                        <HoverNodeStyle Font-Underline="False" />

                                        <SelectedNodeStyle Font-Underline="false" HorizontalPadding="0px" VerticalPadding="0px" Font-Bold="false" Font-Italic="false" ForeColor="black" />

                                        <Nodes>

                                            <asp:TreeNode Text="节点一" Value="节点一" Expanded="true">

                                                <asp:TreeNode Text="一队" Value="一队" Expanded="True">

                                                    <asp:TreeNode Text="张三" Value="张三" NavigateUrl="" Target="iFrameInfo"></asp:TreeNode>

                                                    <asp:TreeNode Text="李四" Value="李四"></asp:TreeNode>

                                                </asp:TreeNode>

                                                <asp:TreeNode Text="二队" Value="二队" PopulateOnDemand="True"></asp:TreeNode>

                                            </asp:TreeNode>

                                        </Nodes>

                                        <NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px"

                                            NodeSpacing="0px" VerticalPadding="0px" ImageUrl="~/images/person.gif" />

                                        <RootNodeStyle ImageUrl="~/images/dw.gif" />

                                    </asp:TreeView>

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Qt的QXmlStreamReader类来解析XML文件生成树结构。下面是一个简单的示例代码: ```cpp #include <QFile> #include <QXmlStreamReader> #include <QDebug> void parseXmlFile(const QString &filePath, QTreeWidgetItem *parentItem) { QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Failed to open XML file"; return; } QXmlStreamReader xmlReader(&file); while (!xmlReader.atEnd() && !xmlReader.hasError()) { QXmlStreamReader::TokenType token = xmlReader.readNext(); if (token == QXmlStreamReader::StartElement) { QString elementName = xmlReader.name().toString(); QTreeWidgetItem *item = new QTreeWidgetItem(parentItem); item->setText(0, elementName); // 解析元素的属性 QXmlStreamAttributes attributes = xmlReader.attributes(); foreach (const QXmlStreamAttribute &attribute, attributes) { QString attributeName = attribute.name().toString(); QString attributeValue = attribute.value().toString(); QTreeWidgetItem *attributeItem = new QTreeWidgetItem(item); attributeItem->setText(0, attributeName + ": " + attributeValue); } } else if (token == QXmlStreamReader::Characters && !xmlReader.isWhitespace()) { QString text = xmlReader.text().toString(); QTreeWidgetItem *textItem = new QTreeWidgetItem(parentItem); textItem->setText(0, "Text: " + text); } else if (token == QXmlStreamReader::EndElement) { // 当前元素结束,返回上一级 if (parentItem) parentItem = parentItem->parent(); } } if (xmlReader.hasError()) { qDebug() << "XML parsing error: " << xmlReader.errorString(); } file.close(); } int main() { QTreeWidgetItem *rootItem = new QTreeWidgetItem(); QString filePath = "your_xml_file.xml"; parseXmlFile(filePath, rootItem); // 使用生成的树结构进行其他操作 delete rootItem; return 0; } ``` 在上述示例中,`parseXmlFile`函数用于解析XML文件生成树结构。通过`QXmlStreamReader`逐行读取XML文件,根据不同的`TokenType`进行相应的处理,创建`QTreeWidgetItem`来表示XML元素、属性和文本。你可以根据需要对生成的树结构进行进一步的操作。记得将上述代码中的`your_xml_file.xml`替换为你要解析的XML文件路径。 希望这可以帮助到你!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值