1

MarkLogic 版本:9.0-6.2

这是我正在使用 mlcp 将 staging db 摄取的示例 xml 文件。我的要求是将 xml 拆分为每个 Policy 的单独文档,但是在将 TransactionRequestDt 重新格式化为 YYYYMMDDHHMMSS 之后,将 uri_id 创建为 /policy/PolNum/TransactionRequestDt.xml。示例 uri 是 /policy/P123/201610171533390000000.xml

<?xml version="1.0" encoding="UTF-8"?>
<PolicyInfo>
    <TransactionRequestDt>2016-10-17T15:33:39.770<TransactionRequestDt>
    <Policy>
        <PolNum>P123</PolNum>
        ....
        ....
    </Policy>
   <Policy>
        <PolNum>P456</PolNum>
        ....
        ....
    </Policy>
</PolicyInfo>

我的 mlcp 代码如下所示

mlcp.sh import -ssl \
-host localhost \
-port 8010 \
-username nnnn \
-password ffff \
-input_file_path /f1/f2 \
-input_file_type aggregates \
-aggregate_record_element Policy \
-output_collections policy \
-output_uri_prefix /policy/ \
-uri_id PolNum \
-transform_module /ext/ingesttransform.sjs \
-output_uri_suffix ".xml"

我的想法是使用转换函数重新格式化 TransactionRequestDt,但意识到元素 TransactionRequestDt 不可用于转换(因为它在“策略”聚合之外)。

访问 TransactionRequestDt 并在 uri 中使用它的最佳方法是什么?我试过了

-transaction_param TransactionRequestDt

但看起来参数值作为“TransactionRequestDt”(字符串)而不是 TransactionRequestDt 的实际日期值传递。

4

1 回答 1

1

我会考虑不使用-aggregate_record_element参数,因此您可以访问转换中的完整文档(因此将对整个文件调用一次)。在您内部读取并规范化该日期,获取 Policy 子项(使用类似的东西content.xpath('/PolicyInfo/Policy')),迭代这些子项,并构建一系列{ uri: ..., value: ... }对象以作为转换结果返回。MLCP 将检测到您正在返回多个结果,并将它们全部写入。

这里有一个带有示例代码的类似 SO 答案。请注意,它说的是拆分 JSON,而不是 XML。不要这样做toObject(),而是使用xpath(),也不需要xdmp.toJSON()

https://stackoverflow.com/a/36506478/918496

于 2019-01-31T08:01:33.210 回答