XForms/调试 XForms
如果您是 XForms 的新手,并且在调试 XForms 时遇到问题,您并不孤单。XForms 调试可能很棘手,尤其是对于新手来说。如果您关注 XForms 的新闻组,您会发现一些问题经常出现。
这些问题,按频率粗略排序,包括以下内容
- 确保使用
.xhtml
扩展名命名您的文件。包括 FireFox 在内的许多浏览器不会在扩展名为 .htm 或 .html 的文件中查找 XML 标签。 - 与忘记将实例数据与命名空间或默认命名空间关联相关的问题。这可以通过将
xmlns=""
参数添加到您的实例变量来解决。 - 文档主体中的命名空间不正确或缺失。例如,如果默认命名空间是 html,标签 <input> 是有效的,但浏览器会将其视为 <html:input>,而不是 <xf:input>。当用户从使用 XForms 作为默认命名空间的地方复制 XForms 示例代码时,这种情况经常发生。这是一个很好的理由,说明教程和培训开发人员不应使用 XForms 作为默认命名空间。
- 模型和视图之间的绑定不正确。这通常发生在 “ref” 或 “nodeset” 属性定义不正确,或者组或重复更改数据元素的路径前缀时。
- 无法将表单绑定到实例,因为 XForms 处理器找不到一个或多个实例特定的命名空间。如果您使用 XSLT 或 XQuery 自定义了 XForm,然后再将其流式传输到用户,则处理器可能会将一些命名空间的声明降级到其首次出现的实例,因为它将您 xform 上 ref 和 bind 属性的内容视为内容。但是,您的 XForms 处理器可能期望 ref 属性中命名空间的定义在父轴上,并且可能不会在模型实例中查找任何声明。当这种情况发生时,您需要手动构建根 xhtml:html 节点,并显式声明出现在您的表单中的任何命名空间。
有些人发现这个 XForms 验证器很有帮助
http://xformsinstitute.com/validator
该程序将查找 XForms 示例中的常见错误。
有一个用于 XSLT 的不错的 Eclipse 插件,还提供 XPath 验证 “视图”。见:http://wiki.eclipse.org/XSLT_Project
最实用的 Firefox 扩展之一是 XForms Buddy 调试器。此工具允许您在 XForms 在 Firefox 浏览器中运行时直观地检查模型中的所有实例。这对于确保动态配置的实例值由 XForms 正确设置特别有用。该网站的链接是:这里
还有一种方法可以在您的 JavaScript 代码中直观地查看您的绑定。
这些接口在这里有记录
以下是一些针对调试 XForms 的人的建议
有时,当您创建对 Web 服务的复杂提交时,您需要确保 XForms 应用程序正在生成的正是 Web 服务所期望的。有时,Web 服务供应商会提供一个正确调用其服务的示例 Web 表单客户端,但调用该服务的文档却有些不足。解决此问题的其中一个方法是观察 HTTP 数据包离开工作应用程序,并将它们与您的 XForms 的 HTTP 数据包进行比较。这可以使用 HTTP 代理工具来完成,例如 Charles,它也可以作为 Firefox 扩展运行。
标准 Web 开发调试器(如 Firebug 和 Google Chrome Javascript 控制台)的 “网络” 选项卡可用于观察进出浏览器的网络流量,让您能够验证提交的内容、方法和 HTTP 错误代码是否符合预期。
代理是一种 “代表” Web 服务器的工具。它将自己置于您的 Web 浏览器和服务器之间,并告诉您浏览器刚刚发送到 Web 服务器的内容。为此,您必须设置 Web 浏览器以使用代理(通过告诉它将所有内容转发到另一个 IP 地址),然后代理将其转发到服务。
完成使用代理后,请确保您记住通过转到 Firefox 工具/选项/常规/连接设置并单击直接连接到 Internet 来禁用代理。如果您不这样做,您的 Web 浏览器在 Charles 或 Tamper Data 关闭时将不再起作用。
有一些 XForms 是专门设计用于使用 HTTP put、HTTP post 和 [w:WebDAV:WebDAV] 的。WebDAV 允许您不仅存储表单的第一个版本,还可以返回查看以前的版本。Subversion 常见问题解答 [1] 建议您运行 Wireshark 数据包嗅探器,并查看 HTTP 消息中的数据。
要验证数据文件是否格式正确,您可以使用 RUWF(您是否格式正确)?XML 语法检查器
某些版本的 IE 6.0 未为 IE6 设置正确的 MIME 类型。要解决此问题,您必须在 Microsoft Windows 注册表中添加一个条目。
打开命令提示符并输入命令 "regedit"。
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/xhtml+xml] "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}" "Encoding"=hex:08,00,00,00 "Extension"=".xhtml"