在写入数据库之前验证 XML 文档中的日期

Posted

技术标签:

【中文标题】在写入数据库之前验证 XML 文档中的日期【英文标题】:Validate dates in XML Document before writing to database 【发布时间】:2010-12-20 23:06:19 【问题描述】:

我目前正在从一个非常大的表单作为 XML 文档获取用户输入。我想在任何与数据库相关的操作之前根据模式验证此 XML 文档。问题是用户根据自己的偏好(美国标准、ISO 标准等)输入日期,而数据库希望日期是 ISO 标准。无论如何,我可以在将它添加到数据库之前验证这个 XML 文档并将日期更改为 ISO 格式吗?我在后端使用 Perl,有什么库可以帮助我做同样的事情吗?

干杯,

【问题讨论】:

【参考方案1】:

日期转换

HTTP::Date

用于处理一般的 xmls

Perl-XML

用于处理 XLST 的 PM(你猜对了)

XML::XLST

【讨论】:

这当然很有用,但我更喜欢在模式本身中进行验证。这样,使用相同模式的其他应用程序也可以正常工作。有没有办法将验证放入“日期”元素的架构中?并针对该架构进行验证以更正数据库不接受的日期格式? @Gaurav,这是一个棘手的问题......我唯一一次使用 Perl 进行 XML 解析/检查我现在在帖子中使用了这个其他模块 @Gaurav,至于您最近(和要求更高)对您的问题的澄清,我认为我无法帮助您。 @William 感谢您的链接!很抱歉继续推进,但我认为可能有一种方法可以让 XSLT 转换将 XML 文档中的日期更改为正确的格式?没有图书馆吗?非常感谢队友! :) @Gaurav 啊哈,也许是这个?【参考方案2】:

有Data::Validate::XSD我没有任何经验。

过去,我确实使用过XML::LibXML::Schema。

我会遍历文档,使用DateTime::Format::XSD(结合DateTime)转换所有日期,然后尝试验证。

【讨论】:

DateTime::Format::XSD 绝对有用,但话又说回来,它只将 ISO 格式解析为特定的 ISO 格式。澳大利亚标准 (dd/mm/yyyy) 或美国标准 (mm/dd/yyyy) 格式会有问题。理想情况下,我希望在验证之前进行 XSL 转换,以将这些日期更改为正确的格式 - 然后只需验证文档,然后写入数据库【参考方案3】:

您可以有一个小架构来使用正则表达式验证您的特殊日期,然后是一个 xslt 来将您的日期转换为其他格式,然后是一个架构来验证您​​的所有 xml 文档。

【讨论】:

以上是关于在写入数据库之前验证 XML 文档中的日期的主要内容,如果未能解决你的问题,请参考以下文章

XML 解析

操作xml文档,将文档中的数据读取到内存中

java中怎么实现读取word.doc文档分辨标题,文号,签发日期等信息

XML--解析

XML文档的解析

JDOM 如何修改XML文档中的CDATA段数据