【发布时间】:2018-09-28 22:07:57
【问题描述】:
可以将 HTML 表单绑定到 XML 文档吗?
为了提供一些上下文,Adobe XFA 表单是为呈现为 PDF 表单而创建的 XML 文档。它们支持与我正在寻找的非常相似的 XML 绑定,但我不知道 HTML 表单中有任何类似的东西并寻求建议。
XFA 表单还可以定义绑定到其表单字段的 XML 文档的绑定。不需要定义模式 - 表单可以与 XML 数据合并,也可以根据表单中指定的绑定生成 XML 数据。
示例表单定义:
<subform layout="tb">
<bind match="dataRef" ref="$.doc" />
<field w="0.5in">
<bind match="none" />
<ui>
<button />
</ui>
<caption>
<value>Add</value>
</caption>
<event activity="click" name="event__click">
<script contentType="application/x-javascript">
this.resolveNode("itemList").instanceManager.addInstance();
</script>
<event>
</field>
<subform layout="tb" name="itemList">
<bind match="dataRef" ref="$.item[*]">
<occur min="1" max="-1" />
<field w="2in">
<bind match="dataRef" ref="$.name" />
<ui>
<textEdit />
</ui>
<caption>
<value>Name</value>
</caption>
</field>
</subform>
</subform>
如果表单在没有数据的情况下呈现,它看起来类似于:
如果表单与以下输入数据合并:
<doc>
<item>
<name>item1</name>
</item>
<item>
<name>item2</name>
</item>
<item>
<name>item3</name>
</item>
</doc>
它会呈现类似于:
您可能会在表单定义代码中注意到,Adobe XFA 表单使用自己的 XML 语言和称为 SOM 表达式的表达式语法。第一个绑定$.doc 绑定到顶级根节点名称doc。
下一个绑定 $.item[*] 嵌套在 subform 元素中,并且与 $.doc 绑定相关。
子表单元素是一个容器,类似于 HTML div 元素。
子表单绑定到根doc 元素下的item 元素。 [*] 语法意味着子表单将针对 xml 文档中的每个 item 元素重复。
子表单元素中的occur 元素进一步限定了可以发生的实例数。 min=1表示即使合并到表单中的数据中没有item元素,也会自动生成一个。 max=-1 表示项目实例的数量没有限制。
field 元素绑定到$.name。这意味着它的值将更新(或创建)当前item 下的name 元素。
表单中的“添加”按钮会创建新实例,Adobe Reader 有一个内置的 Javascript 引擎和它自己的 API 来管理持久化回绑定到表单的 XML 数据的表单实例。
当然,也可以从保存的 PDF 表单中提取 XML 数据。
XFA 表单中还有更多功能,例如条件绑定,但我很好奇 HTML 表单中是否存在类似的东西,也许是一些可以将表单链接到 XML 文档并以类似方式定位它们的库.
XPATH 将是理想的替代 Adobe SOM 表达式语法。此外,最好从表单发布 XML,而不是 HTML 表单默认执行的名称/值对。
【问题讨论】:
-
所以你想从 XFA 定义中生成一个 HTML 表单,或者..?
-
不,我发现很难解释我在寻找什么,我能找到的唯一类似的例子是 XFA。
-
所以您想将提交的 HTML 表单转换为 XML?或从 XML 文件填写表格?或两者?在网站上?如果在网站上,使用什么服务器端堆栈?可能有服务器端的东西可以做到这一点,或者你可以自己用几行代码编写它......但是HTML中没有内置的东西可以为你做到这一点。
-
我们在这里谈论的是 XSD(模式定义)还是 XSLT(样式表)?前者是关于验证您的 XML 格式是否正确,后者是关于将您的 XML 转换为其他内容(例如 PDF XML)。明确我们想要的答案将对我有很大帮助。
-
HTML 与 XML 非常相似,因此创建 XML 表单然后转换为 HTML 并不比直接编写 HTML 表单更容易。如果您想将 XML 表单用于多种格式,那么答案中列出了工具。
标签: javascript html xml forms