【问题标题】:Create page based on xml schema and add data from xml record基于 xml 架构创建页面并从 xml 记录中添加数据
【发布时间】:2009-04-13 19:32:58
【问题描述】:

假设我有一个系统,可以在 xml 中存储一些复杂对象的数据。这些对象具有弱继承关系:可能是所有对象共有的 4 个字段,然后是每种对象类型独有的另外 20 个字段,例如 6 到 8 个不同类型的对象。

每个对象独有的数据本身可能很复杂:诸如枚举、其他复杂类型和仅在条件下使用的项目。每种类型的对象都有一个 xml 模式来描述它。

该系统通过一系列步骤为每个对象建立一个记录,因此只有部分记录是很常见的。每个步骤的内容没有定义:用户可以填写他们知道的尽可能多的内容,然后将其传递给更有知识的人来完成。

我想做的是创建一个 ASP.Net 页面来显示这些记录。给定记录号(和类型)将该类型的模式加载到表单中,然后从记录本身填充表单。我认为记录本身不足以创建页面,因为记录可能尚未列出我想在表单中包含的每个字段,并且不会隐式包含枚举等类型的数据。

什么是完成此任务的优雅方式?我确定我错过了一些关于执行此操作的简单方法的明显内容,但 Xslt 可能不会削减它。

这是对this question 的跟进,目前纯属假设。根据这里的回复,我可能会完全不同。

【问题讨论】:

  • 你为什么说“XSLT 可能不会削减它”? XSLT 是将 XML 数据和 XML-Schema 元数据转换为 HTML 的完美工具。
  • 好的,非常好,但并不完美。有点忘乎所以。

标签: .net asp.net xml


【解决方案1】:

当您说“Xslt 可能不会成功”时,我想知道您想到的是哪种 Xslt 方法。

一种方法是以某种方式转换表单的实例数据。 (我不确定这在实践中是如何工作的,也许这就是你说 Xslt 不起作用的原因。)

另一种方法是使用 Xslt 生成定制的一次性架构,该架构针对表单数据的当前状态量身定制。然后,您将使用此架构来构建表单。例如,转换后的模式将排除尚未准备好显示的字段的定义。这对我来说听起来很可行(不是说我是自愿的:-)

UPDATE(响应 cmets): 说实话,我对 asp.net 的了解还不够,无法说出它的缓存是否适合您的需求。我原以为您想要缓存,原因我会讲到。

试图澄清我的意思:我在您的描述中听到的是,记录的当前状态可能会影响表单的结构。例如,字段 A 的合法值可能受到字段 X、Y 和 Z 的值的约束,其中一些在给定时间实际上可能是未知的和不可知的;这种模糊性可能会导致难以使用单一、统一的结构来呈现表单。

我的想法是,也许您不必将自己限制在不可变的模式中。如果数据的当前状态可以通过修改后的模式更好地表示(例如,反映字段 A 允许的枚举值的模式,或者当前允许字段 B 的联合选择),那么我建议也许转换模式在创建表单之前可能会成功。对于您对缓存的评论,我担心由于数据和架构的更改,缓存可能会导致在需要更新的表单定义时提供陈旧的表单定义。也许您可以通过根据自定义模式的当前状态置换命名空间 URL 来避免这种情况。

我希望这会有所帮助。

【讨论】:

  • 我需要始终显示所有字段,即使还没有数据。记录的转换将排除这些字段,并且转换模式并稍后添加记录数据可能比仅仅构建它更复杂。
  • 或者您是否建议在第一次需要时从模式构建模板,然后让 ASP.Net 缓存它?嗯......可能有一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多