Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML DocumentWriter-阻止空元素出现在.NET中的两行上_C#_Xml_Vb.net - Fatal编程技术网

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

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

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

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

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

这会在大多数情况下生成正确的XML输出,例如
原因

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


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

备选方案
不可接受(第三方应用程序不接受)

谢谢 Steven

if(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/>