【问题标题】:Fetching common elements using XQuery使用 XQuery 获取公共元素
【发布时间】:2016-09-06 21:52:02
【问题描述】:

我遇到了一个问题,使用 XQuery 根据标签返回公共元素。我正在尝试编写一个返回公共元素的 XQ 函数。例如,我有一个 XML: $schoolA

<schoolA>
    <name>ABC</name>
    <students>1000</students>
    <classes>25</classes>
</schoolA>
<schoolA>
    <name>DEF</name>
    <students>1200</students>
    <classes>20</classes>
</schoolA>
<schoolA>
    <name>GHY</name>
    <students>900</students>
    <classes>30</classes>
</schoolA>

另一个是: $学校B

<schoolB>
    <name>ABC</name>
    <students>1000</students>
    <classes>25</classes>
</schoolB>
<schoolB>
    <name>DEF</name>
    <students>1200</students>
    <classes>20</classes>
</schoolB>
<schoolB>
    <name>XYZ</name>
    <students>1100</students>
    <classes>30</classes>
</schoolB>

函数应该返回: $commonSchool

<schoolA>
    <name>ABC</name>
    <students>1000</students>
    <classes>25</classes>
</schoolA>
<schoolA>
    <name>DEF</name>
    <students>1200</students>
    <classes>20</classes>
</schoolA>

匹配因素是名称。我正在尝试编写一个嵌套的 for 循环,但坚持将元素附加到一个变量。任何有关如何做的线索都会很棒!

【问题讨论】:

  • 请求家庭作业帮助的问题必须包括您迄今为止为解决问题所做的工作的总结,以及您在解决问题时遇到的困难的描述。见stackoverflow.com/help/on-topic
  • XQuery 1.0 还是 3.0/3.1?在 3.0/3.1 中,您可以使用新的“分组依据”构造。

标签: xml xpath xquery


【解决方案1】:

此 XQuery 函数根据 &lt;name&gt; 元素的值匹配两个元素序列。为简单起见,假设您已将两组 School 元素包装在一个名为 &lt;schools&gt; 的包装器中。

这适用于 XQuery 1.0。

declare namespace _="http://local/funcs";

declare function _:munge($schoolA as element()*, $schoolB as element()*) {
    $schoolA[name=$schoolB/name]
};

_:munge(schools/schoolA, schools/schoolB)

【讨论】:

  • 或者更简单的,函数体可以是$schoolA[name=$schoolB/name]
  • 不幸的是,该应用程序使用 v1.0。我会试试这些建议!谢谢!
  • 把这个变成了一个独立的例子,结合了Michael的改进,并验证了XQuery 1.0的兼容性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多