在写入数据库之前验证 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 文档中的日期的主要内容,如果未能解决你的问题,请参考以下文章