XElement 是否内置了对 nil=true 的支持
Does XElement have built in support for nil=true
我将以下 xml 解析为名为条目的 XElement。
<Person>
<Name>Ann</Name>
<Age i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
</Person>
获取年龄属性时我这样写:
var entry =
XElement.Parse(
"<Person><Name>Ann</Name><Age i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" /></Person>");
var age = entry.Element("Age").Value;
age 现在是 "",我想知道是否有某种构建方法可以获取 null 而不是 ""?
如果条目不在 xml 中,大多数搜索都会讨论,但我总是这样填写空值。
不,我不相信这有什么用,但是写一个扩展方法会非常容易:
private static readonly XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
public static string NilAwareValue(this XElement element)
{
XAttribute nil = element.Attribute(ns + "nil");
return nil != null && (bool) nil ? null : element.Value;
}
或者使用可为空的 bool 转换:
public static string NilAwareValue(this XElement element)
{
return (bool?) element.Attribute(ns + "nil") ?? false ? null : element.Value;
}
我将以下 xml 解析为名为条目的 XElement。
<Person>
<Name>Ann</Name>
<Age i:nil="true" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
</Person>
获取年龄属性时我这样写:
var entry =
XElement.Parse(
"<Person><Name>Ann</Name><Age i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" /></Person>");
var age = entry.Element("Age").Value;
age 现在是 "",我想知道是否有某种构建方法可以获取 null 而不是 ""?
如果条目不在 xml 中,大多数搜索都会讨论,但我总是这样填写空值。
不,我不相信这有什么用,但是写一个扩展方法会非常容易:
private static readonly XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
public static string NilAwareValue(this XElement element)
{
XAttribute nil = element.Attribute(ns + "nil");
return nil != null && (bool) nil ? null : element.Value;
}
或者使用可为空的 bool 转换:
public static string NilAwareValue(this XElement element)
{
return (bool?) element.Attribute(ns + "nil") ?? false ? null : element.Value;
}