在XML Literals中使用字符串

joh*_*hnc 3 xml vb.net xml-literals

我是一个C#开发人员,他在VB6编写的第一个VB代码中摸索着,所以如果我问一个相当明显的问题,请原谅我.

我决定尝试使用XML Literals为我生成一些XML代码,而不是使用XMLDocument

我有两个问题,第二个问题是由于我无法找出第一个问题而解决的问题.

1:理想的解决方案

我有一个ElementName字典,ElementValue我的KeyValue对我循环,希望动态生成值,但下面的语法死了可怕的死亡

Dim xConnections As XElement        
For Each connection As Connection In connections.AsList
    For Each kvp As KeyValuePair(Of String, String) In connection.DecompiledElements
        xConnections = <Connections> <<%= kvp.Key %>><%= kvp.Value %><\<%=kvp.Key %>>  </Connections>
    Next
Next
Run Code Online (Sandbox Code Playgroud)

我对T4语法(<%=%>语法)的模糊记忆能够处理更复杂的操作(而不是直接赋值给<%=)和'Response.Write'这样的对象来写输出,但是我不记得细节了.

2:Cludgy解决方法

相反,我想到构建一个StringBuilder对象并将其.ToString分配给XElement,但是也因转换错误而失败.

我更愿意在上面的例子中继续使用我的键值对概念,因为我觉得上面的例子2中的字符串在一起非常讨厌,如果相反,我真的应该回到使用XMLDocument.

任何想法或帮助非常感谢

Cod*_*nis 7

VB.NET XML Literals非常强大,但最常添加一些LINQ使它们真的很棒.这段代码应该完全符合您的要求.

Dim Elements = New Dictionary(Of String, String)
Elements.Add("Key1", "Value1")
Elements.Add("Key2", "Value2")
Elements.Add("Key3", "Value3")

Dim xConnections = <Connections>
                       <%= From elem In Elements _
                           Select <<%= elem.Key %>><%= elem.Value %></> %>
                   </Connections>
Run Code Online (Sandbox Code Playgroud)

空结束标记</>是vb编译器正确构造一个xml元素所需的全部内容,该元素的名称是从<%= %>块内的值生成的.

调用xConnections.ToString呈现以下内容:

<Connections>
    <Key1>Value1</Key1>
    <Key2>Value2</Key2>
    <Key3>Value3</Key3>
</Connections>
Run Code Online (Sandbox Code Playgroud)