使用MarkLogic中的Information Studio拆分XML文件

时间:2012-05-31 14:14:23

标签: xml marklogic

我需要拆分XML文件,如下所示

<root>
   <Credit>
       <TradeId>123</TradeId>
       <name>abcd</name>
   </Credit>
   <Credit>
       <TradeId>456</TradeId>
       <name>efgh</name>
   </Credit>
   <Credit>
       <TradeId>789</TradeId>
       <name>ijkl</name>
   </Credit>
</root>

由节点Credit分成3个单独的文件,每个文件如下所示:

<root>
   <Credit>
       <TradeId>123</TradeId>
       <name>abcd</name>
   </Credit>
</root>

我在MarkLogic的Information Studio中的XSLT(样式表版本2.0)转换选项中使用了以下代码,但它无效。它正在加载原始文件,而不是将其拆分为较小的文件并加载它们。

<xsl:template match="/">
   <xsl:for-each select="collection(iri-to-uri('./?select=*.xml;recurse=yes'))">
     <xsl:for-each select="//Credit">
      <xsl:variable name="TradeId" select="TradeId" />          
          <xsl:variable name="filename" select="concat('./_Out/', $TradeId, .xml')" />
      <xsl:value-of select="$filename" />
      <xsl:result-document href="{$filename}">
          <root>
        <xsl:copy-of select="node()"/>
          </root>
      </xsl:result-document>
    </xsl:for-each>
   </xsl:for-each>
</xsl:template>

我在这里遗漏了什么吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

问题是由于摄取的文档被加载到名为“Fab”的临时数据库中。那里应用XSLT转换。成功后,结果将移至目标数据库。此文档的移动依赖于特定于信息工作室的属性,这些属性会自动分配给主XSLT输出的结果,但不会分配给来自xsl:result-document次调用的任何辅助输出。

可以用XSLT步骤替换XQuery步骤,将这些属性明确复制到所有结果,但这使得它依赖于信息工作室的特定版本。复制收集器并自定义它以进行拆分更安全。

Github上有一些很好的例子:https://github.com/marklogic/infostudio-plugins