我在VB.NET中使用XML文档对象来操作XML。
我的应用程序创建一个新的XML片段,并通过innerXML方法更新XML:
reasonFrag.InnerXml = String.Format(“<ReasonForPayment>
{0} </ReasonForPayment>
”,原因)
这在大多数情况下产生正确的XML输出,例如
<ReasonForPayment>
{原因{1}}
如果原因字符串为空,我会在XML中获得跨越两行的元素,如下所示:
</ReasonForPayment>
<ReasonForPayment>
我正在寻找一种方法,在保持相同格式的同时将元素保持在单行上,例如
</ReasonForPayment>
替代<ReasonForPayment></ReasonForPayment>
是不可接受的(第三方申请不接受)。
由于 史蒂芬
答案 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/>