条件XElement内容,XElement或XAttribute

时间:2011-02-15 19:55:01

标签: xml vb.net linq

我正在根据从数据库中提取的一些数据构建XML,并考虑尝试使用LINQ2XML构建XML。数据来自几个不同的地方,所以我一直在根据我在DataTable对象中填充的内容按部分构建XML。

使用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"))
     )
)
...

因此,我需要确定ValueQoParse的LINQ查询是否具有有效值(非空)。如果是,那么我可以添加节点及其值。如果它没有,我需要添加该命名节点,但属性为'xsi:nil =“true”'

需要注意的是,有一些后代在不同的父节点上重复(例如,有一个AddressDetails节包含AddressDetail元素。这些AddressDetail元素可以包含0或1个Contact元素的Contact组,所以添加一个节点到Contacts节点不是一个简单的选项,因为它只有一个Contacts元素)。

我通常不会使用LINQ,但它在XD时看起来像个好主意

谢谢, 克里斯

1 个答案:

答案 0 :(得分: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"))

     )
)