VB.NET 中的 XML 文字可以递归吗?
我有一个名为 Profile 的类,它有一些简单的属性,然后它可以有一个 ProfileItem 的集合,它也有一些简单的属性,然后它可以有一个 ProfileItem 的集合>配置文件项(递归)。
现在我尝试使用 VB.NET (3.5) 附带的 XML Literals 生成一个非常简单的保存函数。
我使用的代码如下:
Dim xdoc As XDocument = _
<?xml version="1.0" encoding="utf-8"?>
<profiles>
<%= _
From p In _Profiles _
Select <profile name=<%= p.Name %>>
<%= _
From i In p.GetProfileItems _
Select <item>
<name><%= i.Name %></name>
<action><%= i.Action.ToString %></action>
<type><%= i.Type.ToString %></type>
<arguments><%= i.Arguments %></arguments>
<dependencies>
<%= _
From d In i.GetDependencies _
Select <dependency>
<name><%= d.Name %></name>
</dependency> _
%>
</dependencies>
</item> _
%>
</profile> _
%>
</profiles>
与标签相关的部分应该成为递归的,但我不知道这种语法是否以某种方式支持它。
我是否应该重写所有内容以避免使用 XML Literal 来实现递归?
I have a class called Profile that has some simple properties and then it can have a collection of ProfileItem that again has some simple properties and then it can have a collection of ProfileItem (RECURSION).
Now I am trying to generated a very simple save function using XML Literals that come with VB.NET (3.5).
The code I am using is the following:
Dim xdoc As XDocument = _
<?xml version="1.0" encoding="utf-8"?>
<profiles>
<%= _
From p In _Profiles _
Select <profile name=<%= p.Name %>>
<%= _
From i In p.GetProfileItems _
Select <item>
<name><%= i.Name %></name>
<action><%= i.Action.ToString %></action>
<type><%= i.Type.ToString %></type>
<arguments><%= i.Arguments %></arguments>
<dependencies>
<%= _
From d In i.GetDependencies _
Select <dependency>
<name><%= d.Name %></name>
</dependency> _
%>
</dependencies>
</item> _
%>
</profile> _
%>
</profiles>
The part related to tag should become recursive, but I don't know if it is in some way supported by this syntax.
Should I rewrite all avoiding usage of XML Literal to implement recursion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
递归是我喜欢 VB.NET XML Literals 的原因之一!
为了执行递归,您需要一个接受 ProfileItems 集合并返回 XElement 的函数。 然后您可以在 XML Literal 中递归调用该函数。
此外,为了使递归正常工作,GetProfileItems 和 GetDependency 需要具有相同的名称(重命名其中之一)并以相同的 Xml 元素结构显示。 递归函数可能如下所示:
当您到达为 GetDependency 函数返回空列表的项目时,递归将结束。 在这种情况下,嵌套的
items
元素将为空:
。 当没有任何子元素时,XML 文字足够智能,可以组合开始和结束items
标记。Recursion is one of the reasons I love VB.NET XML Literals!
In order to do the recursion, you need a function that accepts a ProfileItems collection and returns an XElement. Then you can recursively call that function inside your XML Literal.
Also, in order for the recursion to work, GetProfileItems and GetDependencies need to have the same name (rename one of them) and display with the same Xml Element structure. Here's what the recursive function might look like:
The recursion will end when you get to an item that returns an empty list for the GetDependencies function. In that case, the nested
items
element will be empty:<items/>
. XML Literals are smart enough to combine the start and enditems
tags when there aren't any child elements.