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