xml - XQuery多个xml文件?

标签 xml xquery

是否可以从 xQuery 打开 2 个文档并对它们进行连接?

最佳答案

是的,这是an example来自 XQuery spec .:

“连接是一种非常重要的查询类型,它将来自多个来源的数据组合成一个结果,这是一种非常重要的查询类型。在本节中,我们将说明如何在 XQuery 中表达几种类型的连接。我们将基于以下示例三个文件:

  1. 一个名为parts.xml 的文档,其中包含许多part 元素;每个 part 元素依次包含 partnodescription 子元素。
  2. 一个名为 suppliers.xml 的文档,其中包含许多 supplier 元素;每个 supplier 元素依次包含 suppnosuppname 子元素。
  3. 一个名为 catalog.xml 的文档,其中包含有关供应商和零件之间关系的信息。目录文档包含许多 item 元素,每个元素依次包含 partnosuppnoprice 子元素。

常规(“内部”)联接从两个或多个相关源返回信息,如以下示例所示,该示例组合了来自三个文档的信息。该示例生成一个从目录文档派生的“描述性目录”,但包含零件说明而不是零件编号,以及供应商名称而不是供应商编号。新目录按零件描述的字母顺序排序,然后按供应商名称排序。*

<descriptive-catalog>
   { 
     for $i in fn:doc("catalog.xml")/items/item,
         $p in fn:doc("parts.xml")/parts/part[partno = $i/partno],
         $s in fn:doc("suppliers.xml")/suppliers
                  /supplier[suppno = $i/suppno]
     order by $p/description, $s/suppname
     return
        <item>
           {
           $p/description,
           $s/suppname,
           $i/price
           }
        </item>
   }
</descriptive-catalog>

前面的查询仅返回关于有供应商的零件和有零件的供应商的信息。 外部联接 是一种保留来自一个或多个参与源的信息的联接,包括在其他源中没有匹配元素的元素。例如,供应商和零件之间的左外连接可能会返回有关没有匹配零件的供应商的信息。”

请注意,XQuery 没有标准的 document() 函数(它是一个 XSLT function ),取而代之的是 doc()函数,它是“XQuery 1.0 and XPath 2.0 Functions and Operators”的一部分。

Chris 的回答中至少有两个错误:

  1. XQuery is case sensitive -- 符合规范的 XQuery 处理器不允许在 Chris 的示例中使用大写关键字。
  2. 没有必要给标准函数加上前缀,比如 doc(),我只是引用具有前缀的 XQuery 规范。否则,在我自己的代码中我会省略“fn”前缀。
  3. 函数 document() 不是标准的 XQuery/XPath 函数doc()应该改用函数。

关于xml - XQuery多个xml文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484192/

相关文章:

java - 如何将java id转换为ASCII字符字符串中的数字形式?

xml - XPath、XQuery 和 XPointer 之间的区别

xml - 如何将祖先元素下的所有后代文本节点作为单个字符串检索?

.net - Visual Studio 2010 中 xsd.exe 的替代品

android - 高度一半 fill_parent xml

mysql - 加载 XML 本地内文件 phpmyadmin 错误 #1064

java - Java 如何计算 XML 文档中节点的子节点数?

xml - 使用 Saxon 9.6HE 自动执行多个文件的 xquery

templates - MarkLogic 中的 XQuery 模板不显示任何值,只显示属性 (TDE)

json - JSONiq 和 XQuery 3.1 之间有什么区别?