【问题标题】:Force XML to have Closing tags?强制 XML 有关闭标签?
【发布时间】:2012-07-19 07:51:47
【问题描述】:

我有一个创建 XDocument 的代码,在其中,我使用 System.Xml.Linq 类添加 XElements。唯一的问题是,如果 xml 节点没有值,它会返回一个已经关闭的标签。即

 <Title />

但我有点实现了创建一个同时显示开始标签和结束标签的 XML。即

<Title></Title>

即使它没有价值。有什么办法可以让它看起来像这样吗?

P.S.:我将此代码保存在数据库中,在接受数据类型 xml 的表列下,因此添加 string.Empty 会在数据库上关闭,因此 FML。有什么想法吗?

【问题讨论】:

  • 就 XML 而言,编写该元素的两种方式是等效的。任何处理 XML 的工具都不应在其中之一上绊倒。
  • 不幸的是,客户希望看到开始和结束标签,所以我遇到了一个大问题。

标签: wpf xml silverlight


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    尝试用string.Empty设置Tag的值。

    【讨论】:

      【解决方案3】:

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

      我能找到的唯一替代方法是创建您的 XML 文件,然后使用 StreamReader 和 StreamWriter 将完成的 XML 文档加载到带有 StreamReader 的字符串中,使用 Replace() 方法查找每个可能为空的标签并将其替换为开头和结束标签,然后使用 StreamWriter 用你的新字符串覆盖你的 XML 文件。

      Representing Null values differently when serializing objects to XML

      【讨论】:

        【解决方案4】:

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

        自定义 XmlWriter 应该简单地将所有调用未经修改地传递给包装的 XmlWriter,除了 WriteEndElement 方法,它应该是:

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

        【讨论】:

          猜你喜欢
          • 2014-04-26
          • 2013-10-21
          • 2015-12-09
          • 2014-04-29
          • 2011-03-27
          • 2019-02-02
          • 1970-01-01
          • 2012-12-11
          • 1970-01-01
          相关资源
          最近更新 更多