2012-03-17 83 views
0

我使用C#(在ASP.NET环境中)创建了一个程序,该程序生成一个XML文件。它使用XmlWriter类来编写,但有一件事我不知道该怎么做。如何用C#的XmlWriter类将空字符串写入XML文件?

说,写一个字符串我做的:

xmlWriter.WriteElementString("c1", "name"); 

成为:

< C1>名称</C1>

这是伟大的,直到我尝试写一个空字符串:

xmlWriter.WriteElementString("c1", ""); 

成为:

< C1 />

但是你如何格式化它是什么?

< C1> </C1>

+2

可能重复[C#:XmlTextWriter.WriteElementString上的空字符串失败(http://stackoverflow.com/questions/1176202/c-xmltextwriter-writeelementstring-fails-on-empty-strings) – nemesv 2012-03-17 23:12:21

+0

是,它是重复的,该链接回答我的问题。谢谢。 – ahmd0 2012-03-17 23:22:17

+0

我收回。它实际上并没有解决它。我仍然不能强迫它使用结束标记....如果有人知道为什么,请回复... – ahmd0 2012-03-17 23:47:19

回答

1

从XML的角度来看,两种构造(<c1/><c1></c1>)都是相同的,所以遵从性读者很可能不会让您区分它们。如果您需要特殊的“空值”,请考虑使用为此设计的xsi:nil(http://w3.org/TR/xmlschema-1/#xsi_nil)。

<c1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
1

<c1/>是适当的一个空元素。很像你如何在html中使用<br/>作为新行。

如果你不喜欢这种语法,但它是正确的,你可以手工解析包含/>所有标签被分为手动<></>。否则,也许你应该考虑使用xmlWriter.WriteElementString(“c1”,“”);

+0

是的,我知道。为了我的目的,两个有所作为。 < c1/ >被视为空和< c1 > - 作为空字符串。 – ahmd0 2012-03-17 23:15:28

+1

@ ahmd0,从XML的角度来看,两种构造都是相同的,所以很可能符合的读者不会让你区分它们。如果您需要特殊的“空值”,请考虑使用专为此设计的xsi:nil(http://www.w3.org/TR/xmlschema-1/#xsi_nil)。 – 2012-03-18 00:36:02

+0

@Alexei Levenkov为什么不把它作为单独的答案发布。这似乎是发生了什么 - 我的问题的答案是否定的,不能做到这一点。我会标记它。 – ahmd0 2012-03-18 19:41:24

3
using (XmlWriter writer = new XmlTextWriter(stream) 
{ 
    writer.WriteStartElement("c1") 
    writer.WriteString("") 
    writer.WriteFullEndElement() 
} 

编辑:这里是可测试的代码。无论您如何创建XmlWriter

public static void Main() 
{ 
    using (StringWriter sw = new StringWriter()) 
    { 
     using (XmlWriter xw = XmlWriter.Create(sw)) 
     { 
      xw.WriteStartElement("c1"); 
      xw.WriteString(string.Empty); 
      xw.WriteFullEndElement(); 
     } 

     Console.Write(sw.ToString()); // Prints <c1></c1> 
    } 
} 

您使用的是什么XmlWriter实现?

+0

它应该是XmlTextWriter,还是只是XmlWriter?因为我似乎无法使它与正确的XmlWriter ... – ahmd0 2012-03-17 23:35:25

+0

XmlWriter是一个抽象类。您使用的是什么XmlWriter的实现?你也可以使用'(XmlWriter writer = XmlWriter.Create(stream))'。我怀疑你使用的是哪位作家。重点应放在明确编写一个开始元素和一个完整的元素。 – Tung 2012-03-17 23:47:51

+0

是的,这就是我正在使用的,但它仍然不会添加那些结束标记... – ahmd0 2012-03-17 23:48:41