【问题标题】:Conditional XElement Content, XElement or XAttribute条件 XElement 内容、XElement 或 XAttribute
【发布时间】:2011-06-27 21:14:43
【问题描述】:

我正在根据从数据库中提取的一些数据构建 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"))
     )
)
...

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

需要注意的是,有些后代会在不同的父级上重复(例如,有一个包含 AddressDetail 元素的 AddressDetails 部分。这些 AddressDetail 元素可以包含 0 或 1 个 Contacts 组的 Contact 元素,因此将节点添加到联系人节点不是一个简单的选项,就像只有一个联系人元素时那样)。

我通常不使用 LINQ,但当时它似乎是个好主意 XD

谢谢, 克里斯

【问题讨论】:

    标签: xml vb.net linq


    【解决方案1】:

    对不起,我的基本 =) 但我希望你能明白主要的想法。

    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"))
    
         )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      相关资源
      最近更新 更多