强制XDocument中的空元素展开

时间:2011-06-10 15:20:57

标签: c# xml xml-parsing linq-to-xml

我们必须将xml发送到黑盒处理器,该处理器不能正确处理合同中的空元素,当然,我们无法直接更改。

如果我们发送:

<element />

我们回来了:

<element>\n</element>  

呈现为

    <element>
</element> 

导致我们的客户流程反应不佳

我们应该(需要)回来:

<element></element> 

当我们发送时:

<element></element>

结果符合要求,因此需要发送

<element></element>

不是

到黑匣子。

在检查空元素的属性时,我们注意到

<element /> 

注册isEmpty == true而

<element></element> 

将isEmpty注册为false,因此尝试入侵时我们运行了这个循环:

        foreach (XElement feature in _xDocument.Descendants("feature").Where(feature => feature.Element("expiry").IsEmpty))
        {
            feature.Element("expiry").Value = string.Empty;
        }

在调试过程中,我们确定isEmpty变为false,在调试环境中将此信息发送到黑匣子时,一切都很顺利,但是当我们部署到我们的开发服务器(当然还有测试和产品)时,我们仍然最终从黑匣子看到输出,好像标签是空的一样。

我们如何强制XML文档中的所有空元素始终呈现为扩展标记?

这对我们来说是一个关键的错误修复 - 下游客户受到负面影响。

非常感谢!

1 个答案:

答案 0 :(得分:2)