XmlElement с пустой строкой разобран неверно - PullRequest
1 голос
/ 01 марта 2011

Я работаю над проектом, в котором объект анализируется как 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 на библиотеку классов .NET 2.0.

1 Ответ

2 голосов
/ 01 марта 2011

Установите для свойства 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;
}
...