如何对xml文件进行非规范化?

时间:2017-07-24 08:22:01

标签: xpath xquery marklogic marklogic-8

我有3个属于同一家族的XML文件,如下所述:

Aplha_a.xml

<root>
  <date>24-july-2017</date>
  <ID>001</ID>
  <data>a</data>
  <reg_date>24-july-2017</reg_date>
</root>

Aplha_b.xml

<root>
  <date>24-july-2017</date>
  <ID>001</ID>
  <data>b</data>
  <reg_date>24-july-2017</reg_date>
</root>

Aplha_c.xml

<root>
  <date>24-july-2017</date>
  <ID>001</ID>
  <data>c</data>
  <reg_date>24-july-2017</reg_date>
</root>

现在将3个不同的XML文件组织成单个XML文件,如下所述:

<Alpha_family>
    <root>
      <date>24-july-2017</date>
      <ID>001</ID>
      <data>a</data>
      <reg_date>24-july-2017</reg_date>
    </root>
    <root>
      <date>24-july-2017</date>
      <ID>001</ID>
      <data>b</data>
      <reg_date>24-july-2017</reg_date>
    </root>
    <root>
      <date>24-july-2017</date>
      <ID>001</ID>
      <data>c</data>
      <reg_date>24-july-2017</reg_date>
    </root>
</Alpha_family>

我需要通过仅返回不同的节点来将3 XML文件去规范化为单个XML系列元素。

<Alpha_family>
  <date>24-july-2017</date>
  <ID>001</ID>
  <data>a b c</data>
  <reg_date>24-july-2017</reg_date>
</Alpha_family>

任何人都可以帮忙解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:3)

因此,您并不十分清楚自己想要新的&#34;非规范化的&#34;要组合的节点,但是从给定的示例输出中我假设您想要连接所有不同的值并用空格分隔它们。

以下应该做的工作:

for $family in /Alpha_family
return element { $family/local-name() } {
  for $e in distinct-values($family/*/*/local-name())
  return element { $e } { distinct-values($family/*/*[local-name() = $e])}
}

它首先获取所有不同的元素名称,然后加入这些元素的不同值。