2

元のxmlで見つかった特定の値に応じて作成された複数の要素を挿入したいxmlのソース部分があります

現在、私は私のためにこれを行うサブを持っています:

<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

サイモン

4

1 に答える 1

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
  • <%= %> VB式の値をXMLに埋め込みます
  • xml...<elemname>elemnameと呼ばれるxmlの子孫を選択します
  • 'elem。@attrname`は属性の値を取得します

それはほとんどXQueryです;-)。

于 2010-06-14T11:39:09.557 に答える