XML DocumentWriter - 停止在.NET中出现在两行上的空元素

时间:2011-03-09 16:45:42

标签: c# xml vb.net

我在VB.NET中使用XML文档对象来操作XML。

我的应用程序创建一个新的XML片段,并通过innerXML方法更新XML:

reasonFrag.InnerXml = String.Format(“<ReasonForPayment> {0} </ReasonForPayment>”,原因)

这在大多数情况下产生正确的XML输出,例如
<ReasonForPayment> {原因{1}}

如果原因字符串为空,我会在XML中获得跨越两行的元素,如下所示:

</ReasonForPayment>
<ReasonForPayment>

我正在寻找一种方法,在保持相同格式的同时将元素保持在单行上,例如

</ReasonForPayment>

替代<ReasonForPayment></ReasonForPayment>是不可接受的(第三方申请不接受)。

由于 史蒂芬

4 个答案:

答案 0 :(得分:0)

if(string.IsNullOrEmpty(reason))
{
   reasonFrag.InnerXml = "<ReasonForPayment></ReasonForPayment>"
}
else
{
   reasonFrag.InnerXml = String.Format("<ReasonForPayment>{0}</ReasonForPayment>", reason)
}

答案 1 :(得分:0)

未经测试但可能类似

编辑将其投入LinqPad,可以满足您的需求。

public static string ToXmlFragment(this object input, string element)
{
    //extension method, place in a static class somewhere
    return string.IsNullOrEmpty(input.ToString()) ? 
        string.Format("<{0}></{0}>",element) :
        string.Format("<{0}>{1}</{0}>",element,input);
}


reasonFrag.InnerXml = reason.ToXmlFragment("ReasonForPayment");

答案 2 :(得分:0)

解决我的问题很不寻常。使用streamreader / writer,textreader / writer和XMLDocument对象在.NET中读取或写入文件时,文档格式会根据文件扩展名而改变。因此,例如,读取具有XML扩展名的文件,该文件被处理并格式化为XML。这导致了我的原始问题,在插入CRLF的两行中输出了一个空元素。解决方案是将steam输出到扩展名为.txt的文件,然后将文件重命名为XML,然后保留我的格式。

答案 3 :(得分:0)

我认为解决这个问题的最佳方法是做这样的事情:

if (reason == null | reason.Trim() == "")
{
  reasonFrag.IsEmpty = true;
}
else
{
  reasonFrag.InnerText = reason.Trim();
}

这会将输出更改为

<ReasonForPayment/>