在VB.NET中将多级XML转换为通用列表 [英] Converting a multilevel XML into generic list in VB.NET

查看:54
本文介绍了在VB.NET中将多级XML转换为通用列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的,



我有以下xml,我想把它转换成一个通用的班级列表。

 <? xml version =   1.0 encoding =   utf-8 ?>  
< menuroot >
< 菜单 id = home text = 主页 >
< subMenu id = Syllabusboard text = Syllabusboard url = Syllabusboard.aspx >


< 菜单 id = 主题 text = 主题 >
< SubMenu < span class =code-attribute> id = SyllabusreView text = SyllabusreView url = SyllabusreViewReport.aspx >
< SubMenu < span class =code-attribute> id = 主题 text = 主题图 url = Subject.aspx >

< 菜单 id = 等级 text = 可追溯性 >
< SubMenu id = 年级 text = 年级报告 url = gradeReport.aspx >


< 菜单 id = testresults text = 测试结果 >
< SubMenu id = testReport text = 测试报告 url = TestReport.aspx > ;

< SubMenu id = testresultsforstudent text = testresultsforstudent url = testresultsforstudent.aspx >


< < span class =code-leadattribute>菜单 id = 学生 text = 学生 >
< SubMenu id = AttendaceLog text = 参加者日志 url = Attendace.aspx >

< SubMenu id = studentMpping text = studentMpping url = studentMpping.aspx >



在上面的XML中,我可以使用菜单ID和菜单文本的属性。但是没有得到如何从< submenu>获取值属性。



下面是我试图实现的代码。但我想知道比下面更有效的代码。请帮我一样。



  Dim  attrAdminMenuObjects = XDocument.Parse(xmlAdminDoc.InnerXml)。后代( 菜单
Dim objMenuSettings 作为 MenuSettings


对于 每个 headerMenuNode attrAdminMenuObjects.Elements
对于 每个 childNode headerMenuNode.Nodes
objMenuSettings .Menu_ID = headerMenuNode.FirstAttribute.Value
objMenuSettings .Menu_Text = headerMenuNode.LastAttribute.Value
Dim xeSubmenuElements As XElement = DirectCast (childNode,System.Xml。 Linq.XElement)
如果 xeSubmenuElements.HasAttributes 那么
Dim attrSubMenuElementList as IEnumerable( Of XAttribute)= from attrSubMenuelement xeSubmenuElements.Attributes()选择 attrSubMenuelement
For 每个 att attrSubMenuElementList
选择 案例 att.Name
案例 id
objMenuSettings .SubMenu_ID = att.Value
Case text
objMenuSettings .SubMenu_Text = att.Value
Case url
objMenuSettings .URL = att.Value
案例 分页
objMenuSettings .isPaginationRequired = att.Value
案例 过滤
objMenuSettings .isFilterRequired = att.Value
Case Choose_Columns
objMenuSettings .ChooseColumns = att.Value
End 选择
lstSiteMenuSettings.Add(objMenuSettings)
下一步
结束 如果

下一步

下一步





我想知道是否有任何有效的方法来实现这种情况。请帮帮我。



我尝试过:



  Dim  attrAdminMenuObjects = XDocument.Parse(xmlAdminDoc.InnerXml).Descendants( 菜单
Dim objMenuSettings As MenuSettings


对于 每个 headerMenuNode attrAdminMenuObjects.Elements
对于 < span class =code-keyword>每个 childNode headerMenuNode.Nodes
objMenuSettings .Menu_ID = headerMenuNode.FirstAttribute.Value
objMenuSettings .Menu_Text = headerMe nuNode.LastAttribute.Value
Dim xeSubmenuElements As XElement = DirectCast (childNode,System.Xml.Linq.XElement)
如果 xeSubmenuElements.HasAttributes 然后
Dim attrSubMenuElementList As IEnumerable( Of XAttribute)=来自attrSubMenuelement xeSubmenuElements.Attributes()选择 attrSubMenuelement
对于 每个 att attrSubMenuElementList
选择 Case att.Name
Case id
objMenuSettings .SubMenu_ID = att.Value
案例 text
objMenuSettings .SubMenu_Text = att.Value
案例 url
objMenuSettings .URL = att.Value
案例 分页
objMenuSettin gs .isPaginationRequired = att.Value
Case 过滤
objMenuSettings .isFilterRequired = att.Value
案例 Choose_Columns
objMenuSettings .ChooseColumns = att.Value
End 选择
lstSiteMenuSettings.Add(objMenuSettings)
下一步
结束 如果

Ne xt

下一步

解决方案

< blockquote>正如我在问题评论中提到的,你的问题不清楚......



此刻我只能说:

将xml数据转换为类列表的最佳方法是使用序列化 [ ^ 。请参阅:

XML序列化和反序列化:第1部分 [ ^ ]

XML序列化和反序列化:第2部分 [ ^ ]

自定义类集合序列化的完整示例和反序列化 [ ^ ]

XML序列化示例 [ ^ ]


Dear all,

I have below xml which I wanted to convert it into a generic list of class.

<?xml version="1.0" encoding="utf-8"?>
<menuroot>
  <Menu id="home" text="Home">
    <subMenu id="Syllabusboard" text="Syllabusboard" url="Syllabusboard.aspx">
    
  
  <Menu id="Subjects" text="Subjects">
    <SubMenu id="SyllabusreView" text="SyllabusreView" url="SyllabusreViewReport.aspx">
    <SubMenu id="Subject " text="Subject Map" url="Subject.aspx">
    
  <Menu id="grade" text="Traceability">
    <SubMenu id="grade" text="grade Report" url=" gradeReport.aspx">
    
  
  <Menu id="testresults" text="Test results">
    <SubMenu id="testReport" text="Test Report" url="TestReport.aspx">
    
    <SubMenu id="testresultsforstudent" text="testresultsforstudent" url="testresultsforstudent.aspx">
    
  
  <Menu id="Students" text="Students">
    <SubMenu id="AttendaceLog" text="Attendace Log" url="Attendace.aspx">
    
    <SubMenu id="studentMpping" text="studentMpping" url="studentMpping.aspx">


In the above XML, I am able to attributes of Menu ID and Menu text. But not getting how to get values from <submenu> attributes.

Below is the code which I tried to implement this. But I want to know more efficient code than the below. Please help me the same.

Dim attrAdminMenuObjects = XDocument.Parse(xmlAdminDoc.InnerXml).Descendants("Menu")
                    Dim objMenuSettings As New MenuSettings
 

                    For Each headerMenuNode In attrAdminMenuObjects.Elements
                        For Each childNode In headerMenuNode.Nodes
                            objMenuSettings .Menu_ID = headerMenuNode.FirstAttribute.Value
                           objMenuSettings .Menu_Text = headerMenuNode.LastAttribute.Value
                            Dim xeSubmenuElements As XElement = DirectCast(childNode, System.Xml.Linq.XElement)
                            If xeSubmenuElements.HasAttributes Then
                                Dim attrSubMenuElementList As IEnumerable(Of XAttribute) = From attrSubMenuelement In xeSubmenuElements.Attributes() Select attrSubMenuelement
                                For Each att In attrSubMenuElementList
                                    Select Case att.Name
                                        Case "id"
                                            objMenuSettings .SubMenu_ID = att.Value
                                        Case "text"
                                            objMenuSettings .SubMenu_Text = att.Value
                                        Case "url"
                                            objMenuSettings .URL = att.Value
                                        Case "Pagination"
                                            objMenuSettings .isPaginationRequired = att.Value
                                        Case "Filter"
                                            objMenuSettings .isFilterRequired = att.Value
                                        Case "Choose_Columns"
                                            objMenuSettings .ChooseColumns = att.Value
                                    End Select
                                    lstSiteMenuSettings.Add(objMenuSettings)
                                Next
                            End If

                        Next

                    Next



I wanted to know if there is any efficient way to implement this scenario. Please help me the same.

What I have tried:

Dim attrAdminMenuObjects = XDocument.Parse(xmlAdminDoc.InnerXml).Descendants("Menu")
                    Dim objMenuSettings As New MenuSettings
 

                    For Each headerMenuNode In attrAdminMenuObjects.Elements
                        For Each childNode In headerMenuNode.Nodes
                            objMenuSettings .Menu_ID = headerMenuNode.FirstAttribute.Value
                           objMenuSettings .Menu_Text = headerMenuNode.LastAttribute.Value
                            Dim xeSubmenuElements As XElement = DirectCast(childNode, System.Xml.Linq.XElement)
                            If xeSubmenuElements.HasAttributes Then
                                Dim attrSubMenuElementList As IEnumerable(Of XAttribute) = From attrSubMenuelement In xeSubmenuElements.Attributes() Select attrSubMenuelement
                                For Each att In attrSubMenuElementList
                                    Select Case att.Name
                                        Case "id"
                                            objMenuSettings .SubMenu_ID = att.Value
                                        Case "text"
                                            objMenuSettings .SubMenu_Text = att.Value
                                        Case "url"
                                            objMenuSettings .URL = att.Value
                                        Case "Pagination"
                                            objMenuSettings .isPaginationRequired = att.Value
                                        Case "Filter"
                                            objMenuSettings .isFilterRequired = att.Value
                                        Case "Choose_Columns"
                                            objMenuSettings .ChooseColumns = att.Value
                                    End Select
                                    lstSiteMenuSettings.Add(objMenuSettings)
                                Next
                            End If

                        Next

                    Next

解决方案

As i mentioned in the comment to the question, your question is unclear...

At this moment i can say only:
The best way to "convert" xml data into list of classes is to use serialization[^]. See:
XML Serialization and Deserialization: Part-1[^]
XML Serialization and Deserialization: Part-2[^]
A Complete Sample of Custom Class Collection Serialization and Deserialization[^]
Examples of XML Serialization[^]


这篇关于在VB.NET中将多级XML转换为通用列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆