我正在创建一个读取 XML 文档并创建用于更新文档的输入表单的 Xform。但是,显然由于命名空间问题,我的 Xpath 表达式都没有解析。当实例文件没有命名空间时,我的表单在简单实例上工作正常。但是,我需要命名空间支持。
我的实例文件有一个命名空间“ai:inventory”。
我正在引用实例数据
我应该在哪里为我的命名空间声明前缀“ai”,以便我的 XPath 表达式可以找到合适的元素?/ai:库存/产品?
我已经尝试在 html 开始标签中创建前缀......这没有帮助。
谢谢,
我正在创建一个读取 XML 文档并创建用于更新文档的输入表单的 Xform。但是,显然由于命名空间问题,我的 Xpath 表达式都没有解析。当实例文件没有命名空间时,我的表单在简单实例上工作正常。但是,我需要命名空间支持。
我的实例文件有一个命名空间“ai:inventory”。
我正在引用实例数据
我应该在哪里为我的命名空间声明前缀“ai”,以便我的 XPath 表达式可以找到合适的元素?/ai:库存/产品?
我已经尝试在 html 开始标签中创建前缀......这没有帮助。
谢谢,
XForms 实例本身就是一个 XML 文档,因此您应该为表单中的每个实例包含适当的名称空间声明:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="http://example.com/">
<head>
<xf:model>
<xf:instance>
<ai:inventory xmlns="" xmlns:ai="http://example.com/">
<product>foo</product>
</ai:inventory>
</xf:instance>
</xf:model>
</head>
<body>
<xf:output ref="/ai:inventory/product"/>
</body>
</html>
如果您的实例是内联的(而不是外部资源),有些处理器会正确评估 XPath,但我不建议依赖这种行为。
通常命名空间声明适用于当前元素和所有降序元素。如果您需要在模型和视图中使用相同的命名空间,那么 html 标签是一个不错的选择。像这样的东西:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="yournamespace">
<head>
<xf:model>
<xf:instance xmlns="">
<ai:inventory>
<product>Hello</product>
</ai:inventory>
</xf:instance>
</xf:model>
</head>
<body>
<xf:output ref="/ai:inventory/product"/>
</body>
</html>
请记住,如果您在实例中使用非命名空间元素并且还使用 XHTML 作为默认命名空间,那么您需要使用 xmlns="" 重新声明默认命名空间,如示例所示。
两个答案都得到了纠正。但是,我发现我的问题与使用 xsltforms xsl 样式表呈现我的 xform 有关。当我切换到 orbeon 时,一切正常。