2011-02-15 73 views
1

我基於從數據庫中提取的一些數據構建XML,並且認爲要嘗試使用LINQ2XML構建XML。數據來自幾個不同的地方,所以我一直在根據我在DataTable對象中填充的內容來分段構建XML。有條件的XElement內容,XElement或XAttribute

使用XElements和XAttributes,我可以找到其中一個,但我想知道是否有人對如何確定是否在構建XML時使用XElement或XAttribute有所瞭解。

下面是從XML建築規範與XAttribute硬編碼(VB.NET)段:

... 
New XElement("ParentNode",  
     New XElement("ChildNode",New XAttribute(XNamespace.Xmlns + "nil", "true")) 
) 
... 

以下是我正在使用整個XML建設過程中如何建立子節點,其中的一個例子必要:

... 
New XElement("ParentNode", 
    From db as DataRow in dtTable.Rows _ 
    Order By db("Field") _ 
    Select New XElement("ChildNode", 
      New XElement("ChildID",db("ValueToParse")) 
    ) 
) 
... 

因此,它是在LINQ查詢,我需要確定是否ValueToParse,例如,有一個有效值(非空)。如果是這樣,那麼我可以添加節點和它的價值。如果它不是,我需要添加該命名節點,但具有屬性'xsi:nil =「true」'

需要注意的是,有一些後代會在不同的父母身上重複(例如,包含AddressDetail元素的AddressDetails部分這些AddressDetail元素可以包含0個或1個聯繫人元素的聯繫人組,因此將節點添加到聯繫人節點並不是一個簡單的選項,因爲它只有一個聯繫人元素)。

我通常不使用LINQ,但它似乎是在當時XD一個好主意

謝謝, 克里斯

回答

3

對不起,我的基本=),但我希望你能得到的主要思想。

New XElement("ParentNode", 
    From db as DataRow in dtTable.Rows _ 
    Order By db("Field") _ 
    Select New XElement("ChildNode", 
      db("ValueToParse") != null ? (object)new XElement("ChildID", db("ValueToParse")) : 
             (object)new XAttribute("xsi:nil", "true")) 

    ) 
)