Linq to XML - 仅在某些事情上创建Xelement

时间:2013-01-28 15:58:23

标签: xml linq linq-to-xml

我是linq to xml的新手,并尝试执行以下操作。 我正在从我收到的一些对象创建一个新的xml。

我有一个名为“Scale”的XElement 有一个Bool值“DynamicScale”,如果它是False,我需要创建两个XElements作为Scale的后代,如果它是True,我不要需要这些元素。

  <Scale DynamicScale="False">
    <LowScale>0</LowScale>
    <HighScale>10000</HighScale>
  </Scale>

有没有办法在创建这个语句的过程中添加If语句? 或者任何其他建议来处理这种需求? 如果我想做的话(我知道不可能这样)。任何简单的方法都是受欢迎的。

new XElement("Scale",
    new XAttribute("DynamicScale", c.DynamicScale),
    if (c.DynamicScale == false)
    {
        new XElement("LowScale", c.LowScale),
        new XElement("HighScale", c.HighScale),
    })

2 个答案:

答案 0 :(得分:5)

使用ternary operator

new XElement(
    "Scale",
    new XAttribute("DynamicScale", c.DynamicScale), 
    c.DynamicScale ? 
        null: 
        new[]
        { 
            new XElement("HighScale", c.HighScale),
            new XElement("LowScale", c.LowScale)
        }
);

答案 1 :(得分:3)

new XElement("Scale",
     new XAttribute("DynamicScale",  c.DynamicScale),
     c.DynamicScale ? null : new XElement("LowScale", c.LowScale),
     c.DynamicScale ? null : new XElement("HighScale", c.HighScale));

对于非动态比例,这将产生

  <Scale DynamicScale="False">
    <LowScale>0</LowScale>
    <HighScale>10000</HighScale>
  </Scale>

用于动态比例

  <Scale DynamicScale="True"/>

或更短的版本:

new XElement("Scale",
     new XAttribute("DynamicScale",  c.DynamicScale),
     c.DynamicScale ? null : new XElement[] {
                  new XElement("LowScale", c.LowScale),
                  new XElement("HighScale", c.HighScale) }
     );