2012-07-19 123 views
2

我有一个代码可以创建一个XDocument,并且使用System.Xml.Linq类添加XElements。只有问题是,如果xml节点没有值,它将返回一个已经关闭的标签。即强制XML有闭合标签?

<Title /> 

但是我有点儿不习惯创建一个显示开始标记和关闭标记的XML。即

<Title></Title> 

即使它没有价值。有没有办法让它看起来像这样?

P.S .:我将这段代码保存在数据库中,在一个接受数据类型xml的表列下,因此添加一个字符串.Empty在数据库中关闭,因此FML。有任何想法吗?

+5

书面元素的两种方式是等价的就XML而言。任何处理XML的工具都不应该在其中一个上发生。 – Joey 2012-07-19 08:00:34

+1

不幸的是,客户希望看到打开和关闭标签,所以我遇到了一个大问题。 – Nathan 2012-07-19 08:52:06

回答

2

尝试用""分配的XmlNode的InnerText。这个动作显然会使其扩展为<> </>的形式。

1

尝试使用string.Empty设置标记的值。

1

您可以使用[XmlElement(IsNullable = true)]属性来表示空值,xsi:nil="true",这是我可以得到的。

我能找到的唯一选择是创建您的XML文件,然后使用StreamReader和StreamWriter将您已完成的XML文档加载到StreamReader的字符串中,使用Replace()方法查找并替换每个潜在的null标签,关闭标签,然后使用StreamWriter用您的新字符串覆盖您的XML文件。

Representing Null values differently when serializing objects to XML

1

使用XDocument.WriteTo方法将XDocument写入XmlWriter。实现一个自定义XmlWriter,它包装通过XmlWriter.Create获取的标准XmlWriter,并将自定义XmlWriter传递给WriteTo方法。

定制的XmlWriter应该简单地通过未修改通过调用所有包裹的XmlWriter除了对writeEndElement方法,该方法应该是:

public override void WriteEndElement() 
    { 
     wrapped.WriteFullEndElement(); 
    }