C# 如何获取xml节中的值,如果不存在,则将该值设置为null?
我有这样一个xml文件:C# 如何获取xml节中的值,如果不存在,则将该值设置为null?,c#,.net,linq,xmlreader,xelement,C#,.net,Linq,Xmlreader,Xelement,我有这样一个xml文件: <?xml version="1.0" encoding="utf-8"?> <EffectFile> <Effects> <Effect> <Type>Blur</Type> </Effect> <Effect> <Type>Sharpen</Type> </Effect>
<?xml version="1.0" encoding="utf-8"?>
<EffectFile>
<Effects>
<Effect>
<Type>Blur</Type>
</Effect>
<Effect>
<Type>Sharpen</Type>
</Effect>
<Effect>
<Type>Zoom</Type>
<Options>
<Option>88</Option>
<Option>"miles"</Option>
</Options>
</Effect>
</Effects>
</EffectFile>
xElement.Elements ( "Effects" ).Elements ( "Effect" ).Select (
e => new Effect (
( EffectType ) Enum.Parse ( typeof ( EffectType ), ( string ) e.Elements ( "Type" ).FirstOrDefault ( ) ),
e.Elements ( "Options" ).Select ( p => ( object ) p.Elements ( "Option" ) ) ) );
new Effect (EffectType type, EffectOptions options)
但是在这个版本中,每个效果
至少会获得一个空的效果选项
值。是否有方法指定如果没有效果的选项
部分
,则该值应收集为空
Effect
类型具有如下构造函数:
<?xml version="1.0" encoding="utf-8"?>
<EffectFile>
<Effects>
<Effect>
<Type>Blur</Type>
</Effect>
<Effect>
<Type>Sharpen</Type>
</Effect>
<Effect>
<Type>Zoom</Type>
<Options>
<Option>88</Option>
<Option>"miles"</Option>
</Options>
</Effect>
</Effects>
</EffectFile>
xElement.Elements ( "Effects" ).Elements ( "Effect" ).Select (
e => new Effect (
( EffectType ) Enum.Parse ( typeof ( EffectType ), ( string ) e.Elements ( "Type" ).FirstOrDefault ( ) ),
e.Elements ( "Options" ).Select ( p => ( object ) p.Elements ( "Option" ) ) ) );
new Effect (EffectType type, EffectOptions options)
因此,如果没有选项
部分,只需将null传递给第二个参数。只需使用Any()
:
老实说,我不明白为什么代码能工作。语句末尾对
对象的强制转换与构造函数所需的参数类型EffectOptions
冲突。你说得对,我遗漏了一个细节。效果还有一个构造函数,其中第二个参数是IEnumerable options,它被传递给EffectOptions,EffectOptions知道如何将IEnumerable转换为其内部选项列表。谢谢,如果它存在,还会给我多个选项值吗?@Joan:Any()
只需检查集合中是否至少有一项,其余项通过使用完成:null
,因此如果至少有一项,则使用您的集合,否则为null非常感谢,这正是我所需要的。@BrokenGlass:这有点不相关,但我现在注意到存储的选项值似乎是System.Xml.Linq.XContainer+d_11类型。因此,我认为我没有在xml文件的选项标记中获得实际值。你知道怎么做吗?我以为p.Elements(“Option”)会分别给我88和“miles”。为什么不把构造函数改为接受IEnumerable
,而不是对象
?就我所知,没有理由这么不安全。。。