我有一个xml的源代码片段,我要插入多个元素,这些元素的创建取决于原始xml中的某些值
目前我有一个sub为我做这个:
<Extension()>
Public Sub AddElements(ByVal xml As XElement, ByVal elementList As IEnumerable(Of XElement))
For Each e In elementList
xml.Add(e)
Next
End Sub
这将在例程中调用,如下所示:
Dim myElement = New XElement("NewElements")
myElement.AddElements(
xml.Descendants("TheElements").
Where(Function(e) e.Attribute("FilterElement") IsNot Nothing).
Select(Function(e) New XElement("NewElement", New XAttribute("Text", e.Attribute("FilterElement").Value))))
是否可以使用Linq语法重新编写它,因此我不需要调用Sub AddElements但可以全部内联
很多Thx
西蒙
答案 0 :(得分:2)
不确定
Dim outputxml =
New XElement("NewElements",
xml.Descendants("TheElements").
Where(Function(e) e.Attribute("FilterElement") IsNot Nothing).
Select(Function(e) _
New XElement("NewElement",
New XAttribute("Text",e.Attribute("FilterElement").Value)
)
)
)
XElement
和XAttribute
具有构造函数(除元素或属性名称外)还接受任意数量的对象(它们本身可以是查询或其他IEnumerables
)。传递给构造函数的任何内容都将作为内容添加。
您可能还想查看XML文字,这使得它更具可读性,但基本上可以做同样的事情。
使用XML Literals,它看起来像这样:
dim outputxml =
<NewElements><%=
From e In xml...<TheElements>
Where e.@FilterElement IsNot Nothing
Select <NewElement Text=<%= e.@FilterElement %>/>
%></NewElements>
' you can embed names and attribute values too
<%=
%>
在XML中嵌入VB表达式的值xml...<elemname>
选择名为elemname 这几乎是XQuery; - )。