You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MarkLogic TDE提取XML多层级城市字段生成多行数据

MarkLogic TDE提取不同层级城市字段并生成独立行需求

我在使用MarkLogic的TDE(模板驱动提取)功能时,遇到一个需求:需要提取XML中不同层级下的city字段值。如果存在多个城市值,不能合并到同一列(比如制表符分隔形式),而是要为同一人员(例如John Doe)生成独立的数据行。


现有TDE模板代码

let $template= 
<template xmlns="http://marklogic.com/xdmp/tde">
<context>/data/person/address</context>
<rows>
<row>
<schema-name>test</schema-name>
<view-name>data</view-name>
<columns>
<column>
<name>address</name>
<scalar-type>string</scalar-type>
<val>/city</val>
</column>
</columns>
</row>
</rows>
</template>

待提取的XML数据

<data>
    <person>
        <name>John Doe</name>
        <age>30</age>
        <address>
            <city>New York</city>
            <country>USA</country>
        </address>
    </person>
    <employee>     
        <education>graduated</education>
        <address>
            <city>London</city>
            <country>UK</country>
        </address>
    </employee>
</data>

期望输出结果

nameageeducationcity
John Doe30nullNew York
John Doe30graduatedLondon

解决方案:调整TDE模板

要实现需求,需修改TDE模板的上下文和字段提取逻辑,让每个address节点生成一行数据,并关联对应的人员信息:

let $template = 
<template xmlns="http://marklogic.com/xdmp/tde">
  <context>/data/*/address</context>
  <rows>
    <row>
      <schema-name>test</schema-name>
      <view-name>data</view-name>
      <columns>
        <column>
          <name>name</name>
          <scalar-type>string</scalar-type>
          <val>../name</val>
        </column>
        <column>
          <name>age</name>
          <scalar-type>int</scalar-type>
          <val>../age</val>
        </column>
        <column>
          <name>education</name>
          <scalar-type>string</scalar-type>
          <val>../education</val>
        </column>
        <column>
          <name>city</name>
          <scalar-type>string</scalar-type>
          <val>./city</val>
        </column>
      </columns>
    </row>
  </rows>
</template>

关键说明:

  • 上下文设置:/data/*/address会匹配person和employee节点下的所有address,每个address单独生成一行数据;
  • 字段关联:通过../向上遍历父节点,提取person的name、age和employee的education字段,不存在的字段会自动返回null;
  • 城市提取:直接通过./city获取当前address下的城市值,确保每个地址对应独立行。

内容的提问来源于stack exchange,提问作者user3636924

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:38:31