区分XElement中的null和string.Empty值

时间:2012-11-14 16:30:52

标签: c# .net linq-to-xml xelement

我有两个XElement实例:

var el1 = new System.Xml.Linq.XElement("xel", null);
var el2 = new System.Xml.Linq.XElement("xel", string.Empty);

el1看起来像这样:

<xel />

el2看起来像这样:

<xel></xel>

然而, Value属性等于string.Empty

我可以想到在null中区分string.EmptyXElement的大量黑客攻击,但是框架中是否有内置的内容可以解决这个问题?

2 个答案:

答案 0 :(得分:4)

el1.IsEmpty将返回true,另一方面,el2.IsEmpty将返回false。

答案 1 :(得分:2)

来自XML Schema Standard

  

2.6.2 xsi:nil

     

XML Schema:Structures引入了一种机制,用于表明应该接受一个元素   尽管内容类型不需要或甚至不允许空内容,但它没有内容时有效。如果元素具有值为true的属性xsi:nil,则元素可以是有效的而没有内容。如此标记的元素必须为空,但如果相应的复杂类型允许,则可以携带属性。

所以对你来说,你必须将xsi名称空间添加到你的XmlDocument中。然后元素看起来像

<xel xsi:nil="true" />