解析空字符串的XmlElement不正确

时间:2011-03-01 11:00:42

标签: c# xml web-services

我正在开发一个项目,其中一个对象被解析为XmlDocument并发送到服务。一切似乎都正常。但是空参数存在问题。

当参数填充空字符串(“”或string.Empty)时,将解析以下XmlElement:

<parameterName></parameterName>

我需要像这样解析它:

<parameterName />

我被告知这一直是这样的,直到我们将这个项目从.NET 1.1迁移到.NET 2.0。我认为将空的元素解析为<parameterName/>是合乎逻辑的。但它似乎没有。

用于将参数解析为XML的代码是:

public override XmlNode GetXml(XmlNode parentNode)
{
    if (!Assigned) return null;
    XmlElement node = parentNode.OwnerDocument.CreateElement(Name);
    parentNode.AppendChild(node);
    node.InnerText = Value.ToString();
    return node;
}

这似乎不是很奇怪,只是创建一个空值的元素。 使用此方法解析此对象的所有参数,并将其放在一个大的XmlDocument中。 签出XmlDocument.OuterXml时,我可以看到元素被解析为'不正确'。

我是否有一种简单的方法可以改变这种行为。在TFS中搜索代码历史时,我看不到代码中的任何重大更改,这将导致这种不正确的解析。唯一的大变化是改变.NET框架版本(1.1到2.0)并将项目从.NET 1.1 Web服务更改为.NET 2.0类库。

1 个答案:

答案 0 :(得分:2)

在元素上将IsEmpty属性设置为true

public override XmlNode GetXml(XmlNode parentNode)
{
    if (!Assigned) return null;
    XmlElement node = parentNode.OwnerDocument.CreateElement(Name);
    parentNode.AppendChild(node);
    node.InnerText = Value.ToString();
    node.IsEmpty = string.IsNullOrEmpty(node.InnerText);
    return node;
}