【问题标题】:XmlElement with empty string parsed incorrect带有空字符串的 XmlElement 解析不正确
【发布时间】:2011-03-01 19:04:54
【问题描述】:

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

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

<parameterName></parameterName>

我需要这样解析:

<parameterName />

有人告诉我,在我们将这个项目从 .NET 1.1 迁移到 .NET 2.0 之前,这一直是这样工作的。我认为像&lt;parameterName/&gt; 这样解析一个空元素是合乎逻辑的。但它似乎没有。

用于将参数解析为 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 类库。

【问题讨论】:

  • &lt;parameterName&gt;&lt;/parameterName&gt;&lt;parameterName /&gt; 是等价的!​​span>
  • @Daniel:从严格的 XML 角度来看,它们是,但不幸的是,并非所有软件都是为了平等对待它们而编写的。
  • @Fredrik Mörk:我知道,很遗憾。
  • 确实,我所说的大型机对它们的解析方式不同。

标签: c# xml web-services


【解决方案1】:

在您的元素上将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;
}

【讨论】:

  • 谢谢,不知道 IsEmpty 参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 2018-05-25
  • 2014-08-28
  • 1970-01-01
相关资源
最近更新 更多