xforms“实例命名空间”问题

发布于 2024-08-28 07:20:04 字数 299 浏览 8 评论 0原文

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

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

我正在引用实例数据

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

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

谢谢,

I am creating an Xform that reads an XML document and creates an input form for updating the document. However, apparently due to a namespace issue none of my Xpath expressions resolve.My form works fine on a simple instance when the instance file has no namespace.
However, I need the namespace support.

My instance file has a namespace "ai:inventory."

I am referencing the instance data

Where should I be declaring the prefix "ai" for my namespace so that my XPath expressions can find the appropriate elements? /ai:inventory/products ?

I've tried creating the prefix in the html opening tag... that didn't help.

thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

穿透光 2024-09-04 07:20:04

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,但是我不建议依赖这种行为。

An XForms instance is an XML document in its own right, so you should include appropriate namespace declarations for every instance in your form:

<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>

There are some processors that will evaluate the XPath correctly if your instance is inline (rather than an external resource), but I wouldn't recommend relying on that behaviour.

百善笑为先 2024-09-04 07:20:04

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

Generally namespace declaration applies to current element and all descending elements. If you need to use the same namespace both in model and view, then html tag is a good choice. Something like this:

<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>

Keep in mind that if you use non-namespaced elements in instance and also use XHTML as your default namespace, then you need to redeclare default namespace with xmlns="", as in example.

仅此而已 2024-09-04 07:20:04

两个答案均已更正。但是,我发现我的问题与使用 xsltforms xsl 样式表呈现我的 xform 有关。当我切换到 Orbeon 时,一切正常。

Both answers were corrected. However, I found that my issue was related to using the xsltforms xsl stylesheet to render my xform. when i switched to orbeon, everything worked fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文