C# XML DocumentWriter-阻止空元素出现在.NET中的两行上
我正在使用VB.NET中的XML文档对象来操作XML 我的应用程序创建一个新的XML片段,并通过innerXML方法更新XML: reasonFrag.InnerXml=String.Format(“C# XML DocumentWriter-阻止空元素出现在.NET中的两行上,c#,xml,vb.net,C#,Xml,Vb.net,我正在使用VB.NET中的XML文档对象来操作XML 我的应用程序创建一个新的XML片段,并通过innerXML方法更新XML: reasonFrag.InnerXml=String.Format(“{0}”,原因) 这会在大多数情况下生成正确的XML输出,例如 原因 如果原因字符串为空,我将得到XML中跨越两行的元素,如下所示: 我正在寻找一种在保持相同格式的同时将元素保持在一行的方法,例如 备选方案不可接受(第三方应用程序不接受) 谢谢 Stevenif(string.IsNullOr
{0}
”,原因)
这会在大多数情况下生成正确的XML输出,例如
原因
如果原因字符串为空,我将得到XML中跨越两行的元素,如下所示:
我正在寻找一种在保持相同格式的同时将元素保持在一行的方法,例如
备选方案
不可接受(第三方应用程序不接受)
谢谢
Stevenif(string.IsNullOrEmpty(reason))
{
reasonFrag.InnerXml=“”
}
其他的
{
reasonFrag.InnerXml=String.Format(“{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");
公共静态字符串片段(此对象输入,字符串元素)
{
//扩展方法,放置在静态类中的某个位置
返回字符串.IsNullOrEmpty(input.ToString())?
string.Format(“,元素):
格式(“{1}”,元素,输入);
}
reasonFrag.InnerXml=reason.ToXmlFragment(“ReasonForPayment”);
我的问题的解决方案不同寻常。使用streamreader/writer、textreader/writer和XMLDocument对象在.NET中读取或写入文件时,文档格式会根据文件扩展名而变化。例如,在读取一个具有XML扩展名的文件时,该文件被视为XML并格式化。这导致了我最初的问题,在插入CRLF的两行上输出了一个空元素。解决方案是将steam输出到一个扩展名为.txt的文件中,然后将该文件重命名为XML,然后保留我的格式设置。我认为最好的处理方法是执行以下操作:
if (reason == null | reason.Trim() == "")
{
reasonFrag.IsEmpty = true;
}
else
{
reasonFrag.InnerText = reason.Trim();
}
这会将输出更改为
<ReasonForPayment/>
是的,我应该提到我尝试过,但结果仍然跨越两行。因此,您可以尝试在最终XML中用“”替换“\n\r”,或者使用TextWriter而不是XmlDocument。这是一个可能的解决方案,但我希望使用一些简单的方法,例如设置XML文档设置。我同意,您的代码应该*工作,但是当我调用Save例程时,XMLDocument对象添加到了换行符中。我希望有一个XMLSetting或属性可以防止这种情况。真的。。。这有点奇怪。我将进一步研究。您能发布完整的序列化方法吗?Public Sub-sample()Dim myXMLDoc作为新的XmlDocument Dim myFrag作为XmlDocumentFragment=myXMLDoc.CreateDocumentFragment()myFrag.InnerXml=”“Dim DocRoot作为xmlement=myXMLDoc.CreateElement(“根”)myXMLDoc.AppendChild(DocRoot)DocRoot.AppendChild(myFrag)myXMLDoc.Save(“c:\temp\out.xml”)End子项上述重复出现问题
<ReasonForPayment/>