代码之家  ›  专栏  ›  技术社区  ›  Drake

可以在VB.NET中使用XML文本进行递归吗?

  •  7
  • Drake  · 技术社区  · 15 年前

    我有一门课叫 简况 档案项目 档案项目 (递归)。

    现在,我尝试使用VB.NET(3.5)附带的XML文本生成一个非常简单的保存函数。

      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文本来实现递归?

    1 回复  |  直到 15 年前
        1
  •  9
  •   CoderDennis    15 年前

    递归是我喜欢VB.NET XML文本的原因之一!

    此外,为了使递归工作,GetProfileItems和GetDependencies需要具有相同的名称(重命名其中一个)并使用相同的Xml元素结构显示。下面是递归函数的外观:

    Function GetProfileItemsElement(ByVal Items As List(Of ProfileItem) As XElement
        Return <items>
                   <%= From i In Items _
                       Select <item>
                                  <name><%= i.Name %></name>
                                  <!-- other elements here -->
                                  <%= GetProfileItemsElement(i.GetDependencies) %>
                              </item> %>
               </items>
    End Function
    

    items 元素将为空: <items/> . XML文本足够聪明,可以将开始和结束结合起来 不存在任何子元素时的标记。