从根节点提取元素并填充每个文档
Extract element from root node and populate with each document
MarkLogic 版本:9.0-6.2
这是我使用 mlcp 摄取到暂存数据库中的示例 xml 文件。我的要求是将 xml 拆分为每个策略的单独文档,但是在将 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 不可用于转换(因为它在 'Policy' 聚合之外)。
访问 TransactionRequestDt 并在 uri 中使用它的最佳方式是什么?我试过了
-transaction_param TransactionRequestDt
但看起来参数值作为 'TransactionRequestDt'(字符串)而不是 TransactionRequestDt 的实际日期值传递。
我会考虑不使用 -aggregate_record_element
参数,这样您就可以访问转换中的完整文档(因此将对整个文件调用一次)。在内部读取并规范化该日期,获取 Policy 子项(使用 content.xpath('/PolicyInfo/Policy')
之类的东西),迭代这些子项,并构建一个 { uri: ..., value: ... }
对象序列到 return 作为转换的结果. MLCP 会检测到您正在 return 多个结果,并将它们全部写入。
这里有一个带有示例代码的类似 SO 答案。请注意,它说的是拆分 JSON,而不是 XML。不要使用 toObject()
,而是使用 xpath()
,也不需要 xdmp.toJSON()
:
HTH!
MarkLogic 版本:9.0-6.2
这是我使用 mlcp 摄取到暂存数据库中的示例 xml 文件。我的要求是将 xml 拆分为每个策略的单独文档,但是在将 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 不可用于转换(因为它在 'Policy' 聚合之外)。
访问 TransactionRequestDt 并在 uri 中使用它的最佳方式是什么?我试过了
-transaction_param TransactionRequestDt
但看起来参数值作为 'TransactionRequestDt'(字符串)而不是 TransactionRequestDt 的实际日期值传递。
我会考虑不使用 -aggregate_record_element
参数,这样您就可以访问转换中的完整文档(因此将对整个文件调用一次)。在内部读取并规范化该日期,获取 Policy 子项(使用 content.xpath('/PolicyInfo/Policy')
之类的东西),迭代这些子项,并构建一个 { uri: ..., value: ... }
对象序列到 return 作为转换的结果. MLCP 会检测到您正在 return 多个结果,并将它们全部写入。
这里有一个带有示例代码的类似 SO 答案。请注意,它说的是拆分 JSON,而不是 XML。不要使用 toObject()
,而是使用 xpath()
,也不需要 xdmp.toJSON()
:
HTH!