在VB.NET中将多级XML转换为通用列表 [英] Converting a multilevel XML into generic list in VB.NET
问题描述
亲爱的,
我有以下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屋!