我有一个程序需要格式良好的XML输入。因此,我们有一个XML模式来强制执行约束。为了方便用户输入数据,我们使用InfoPath生成基于XSD的表单。现在我们有两个问题。
InfoPath生成的XML实际上并不是用户可读的。格式有点随机。无论如何都要控制输出的写入方式吗?
我想使用表单对数据进行一些预处理。感谢另一个stackoverflow'er我有一个通过文本字段和数据验证这样做的方法,但我不能添加一个新的文本字段到XSD中不存在的表单设计。我不想存储这些数据(它更像是一个不可见的字段)。
的问候,
特雷弗
答案 0 :(得分:3)
不幸的是,对于您的任何一个请求,都没有很好的解决方案。这里有一些解释。
对于第一项 - 表单生成的输出XML应模仿主数据源。这些字段的名称相同,并且缩进(嵌套)应与文件夹匹配。 Infopath确实在顶部放置了一个或两个标签,但这些是必要的,在阅读XML时通常可以忽略它而不会让任何人感到困惑。
如果你需要更具可读性的东西,你必须编写代码来输出格式化你想要的文件。这将引入另一组问题,因为表单必须具有更高的信任级别才能写入本地文件。如果可能的话,你应该避免这条路线。
还要考虑为什么需要XML更易读 - XML应该是统一数据存储/传输的格式,而不是Word文档的替代品。用户不能只在Infopath中打开保存的XML并以您已设置的漂亮格式查看数据(或者某些用户没有表单模板的权限)。
对于第二项 - Infopath将屏幕上显示的每个数据项存储为字段。这在您描述的字段或计算字段(为什么存储计算 - 只存储基本字段并重新计算显示)等情况下尤其令人讨厌。
对此最好的解决方案是将所有“假”字段放入数据源中的不同文件夹(称之为“TrivialFields”或类似的东西)。任何解析XML的代码都可以忽略它,任何必须读取XML的用户都可以轻易忽略该部分。
与您获得的结果相比,大量工作的替代方法是编写代码来执行您当前尝试对该字段执行的工作。您还可以编写代码以在每次保存表单时清除字段 - 因此该字段将存在但在保存的表单中始终为空白。
似乎您的问题都与最终用户阅读已保存表单的XML源有关。您应该让XML成为现实,让用户在InfoPath中查看/打印,而不是走这条路。然后,您可以显式控制格式和视图。您编写的用于处理XML的任何后端代码都不关心是否存在额外的字段或令人困惑的格式 - 毕竟它是代码。