2

我正在使用 linq to xml 创建一个 xml。

在一个元素中,我想根据语句控制元素的值

<Type>Query</Type>

“查询”取决于对象中的一些变量,所以我必须运行 1-2 个 if 语句。(这是正在编写的大 xml 的一部分)我知道我正在写的东西是不可能的,我正在寻找一种方法以任何可能的合法方式做到这一点

new XElement("Parameters",
from p in parameters.ParametersList
select
    new XElement("Parameter", 
        new XAttribute("ID", "??"),
        new XAttribute("Name", p.Name),
        new XElement("Prompt", p.Prompt),
        if (p.validvalues.count == 0)
            new XElement("Type", "None")
        else if (p.something == something)
               new XElement("Type, "List")
4

2 回答 2

2

您可以使用三元运算符(?:):

new XElement("Type", (p.validvalues.Count() == 0) ? "None" : "List")

如果您有复杂的条件或许多可能的值,您可以提取获取此节点值的方法:

new XElement("Type", GetParameterType(p))

private string GetParameterType(Parameter p)
{
    if (p.validvalues.Count() == 0)
        return "None";

    if (p.something == something)
        return "List";

    // etc
}
于 2013-01-29T16:19:57.300 回答
0

我认为没有什么能阻止您将方法插入 XElement 构造函数并添加适合您的逻辑。

class Program
{
    static void Main(string[] args)
    {
        var parameters = new List<MyParam> { 
            new MyParam { Name="bla", Size=1 }, 
            new MyParam { Name="lala", Size=10 }, 
        };

        var xml = new XElement("Parameters",
            from p in parameters
            select new XElement("Parameter",
                 new XAttribute("Name", p.Name),
                 ConditionalElement(p)
                )
        );
    }

    private static XElement ConditionalElement(MyParam arg)
    {
        if (arg.Size < 5)
        {
            return new XElement("Type", "Small");
        }
        else
        {
            return new XElement("Type", "Big");
        }
    }

}

class MyParam
{
    public int Size { get; set; }
    public string Name { get; set; }
}
于 2013-01-29T16:06:27.670 回答