xforms“实例命名空间”问题

时间:2010-04-06 02:31:32

标签: xml xpath xml-namespaces xforms

我正在创建一个Xform,它读取XML文档并创建一个用于更新文档的输入表单。但是,显然由于命名空间问题,我的Xpath表达式都没有解析。当实例文件没有命名空间时,我的表单在一个简单的实例上工作正常。 但是,我需要命名空间支持。

我的实例文件有一个名称空间“ai:inventory”。

我正在引用实例数据     

我应该在哪里为我的命名空间声明前缀“ai”,以便我的XPath表达式可以找到适当的元素? / ai:库存/产品?

我尝试在html开始标记中创建前缀...但没有帮助。

感谢,

3 个答案:

答案 0 :(得分:1)

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,但我不建议您依赖该行为。

答案 1 :(得分:0)

通常,名称空间声明适用于当前元素和所有降序元素。如果你需要在模型和视图中使用相同的命名空间,那么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 =“”重新声明默认命名空间,如示例所示。

答案 2 :(得分:0)

两个答案都得到了纠正。但是,我发现我的问题与使用xsltforms xsl样式表来呈现我的xform有关。当我切换到orbeon时,一切正常。