Linq to XML - 根据 if 语句设置 Xelement 值
本文关键字:语句 设置 Xelement if 根据 to XML Linq | 更新日期: 2023-09-27 17:56:16
我正在使用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")
您可以使用三元运算符 (?:):
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
}
我认为
没有什么能阻止您将方法插入 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; }
}