XSD中的Minoccurs为0,元素的nillable为true。
但是如果我没有设置元素值,则将其作为null并且记录在服务器上消隐。是否有一种方法可以告诉它在满足某些条件时从输出XML中省略该元素,但是在其他情况下使用它?
<xs:element name='CLS_CD' minOccurs='0' nillable='true' type='xdv:stringLen20'/>
答案 0 :(得分:2)
如果您使用XmlSerializer,则可以通过包含PropertyNameSpecified属性来控制是否发出该值。
另一种选择是使用特殊的 用于创建布尔字段的模式 由XmlSerializer识别,和 将XmlIgnoreAttribute应用于 领域。模式是在。中创建的 propertyNameSpecified的形式。对于 例如,如果有一个名为的字段 “MyFirstName”你也会创建一个 名为“MyFirstNameSpecified”的字段 指示XmlSerializer 是否生成XML元素 名为“MyFirstName”。
例如,如果您声明这样的类:
public class Data
{
[XmlIgnore]
public bool CLS_CDSpecified { get; set; }
[XmlElement(IsNullable=true)]
public string CLS_CD { get; set; }
}
然后您可以序列化任何内容,显式nil值或实际值:
var serializer = new XmlSerializer(typeof(Data));
var serializesNothing = new Data();
serializesNothing.CLS_CD = null;
serializesNothing.CLS_CDSpecified = false;
serializer.Serialize(Console.Out, serializesNothing);
Console.WriteLine();
Console.WriteLine();
var serializesNil = new Data();
serializesNil.CLS_CD = null;
serializesNil.CLS_CDSpecified = true;
serializer.Serialize(Console.Out, serializesNil);
Console.WriteLine();
Console.WriteLine();
var serializesValue = new Data();
serializesValue.CLS_CD = "value";
serializesValue.CLS_CDSpecified = true;
serializer.Serialize(Console.Out, serializesValue);
输出:
<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CLS_CD xsi:nil="true" />
</Data>
<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CLS_CD>value</CLS_CD>
</Data>