c# - 如何创建表示 DateTime 中日期的 XElement 类型为 xs :Date

标签 c# xml xsd

我正在使用 XDocument 创建一个 XML 文件,如下所示:

var d = DateTime.Now;

var xDocument = new XDocument(new XElement("ThisIsADate", d));

但是,生成的 XML 使用 xs:datetime 格式(例如“2012-05-11T00:00:00”)表示日期 d。也就是说,它包括时间信息。

但是,我的 XML 旨在匹配我的 XML 架构,它将元素定义为“xs:date”类型。因此,由于额外的时间信息,文件在根据架构进行验证时会被拒绝。

我该如何解决这个问题?我知道我可以自己使用带有格式的 ToString() 来格式化日期,但这当然不是“正确”的方法。我不能指望知道如何将日期格式化为有效的 XML 日期 - 这是框架中与 XML 相关的部分的工作。


编辑:请注意,我确实知道如何使用 ToString() 格式化日期,而且我也知道哪种格式字符串会给我正确的结果。那不是我要找的答案。我正在寻找一个函数/方法/类来理解 xs:date(等)是什么,并且支持这些类型的编码。

需要说明的是,我不是要“完成它”,而是要“把它做好”。重新发明 XML 轮子并不是我书中的“正确做法”。

最佳答案

正如已经指出的那样,LINQ to XML 无法使用 xs:date 格式生成 DateTime 值。 LINQ to XML 中的 DateTime 使用 xs:dateTime 格式往返,而 .NET 没有仅日期类型,因此设计人员并不感到意外的 LINQ to XML 决定只使用 xs:dateTime 以不使 API 复杂化。

唯一的选择是将日期格式化为字符串,让您可以完全控制格式。要正确使用 xs:date 格式,您需要使用以下代码将 DateTime 转换为字符串:

d.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)

使用 ToShortDateString 和/或不指定 CultureInfo 不会产生所需的结果。

关于c# - 如何创建表示 DateTime 中日期的 XElement 类型为 xs :Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11522002/

相关文章:

c# - "MetadataException, Schema specified is not valid"

xml - 用 R 抓取维基百科来制作列表和数据框

xml - 是否可以使用模式在 XML 文档中定义根元素?

java - 从 org.eclipse.xsd.XSDSchema 对象获取 XSD 源?

c# - Mono .Net 支持异步等待吗?

c# - 我想通过 post 方法调用服务器,但它无法正常工作

c# - ASP.NET Web API 的不同返回类型

java - fragment Z 顺序在方向改变时改变

java - 正确打印多行 xml 节点

java - 发现以 Element 开头的无效内容