【问题标题】:Split XML file using Information Studio in MarkLogic在 MarkLogic 中使用 Information Studio 拆分 XML 文件
【发布时间】:2012-05-31 14:14:23
【问题描述】:

我需要拆分一个如下所示的 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>

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

【问题讨论】:

    标签: xml marklogic


    【解决方案1】:

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

    可以将XSLT 步骤替换为XQuery 步骤,该步骤将这些属性显式复制到所有结果中,但这取决于特定版本的信息工作室。复制收集器并对其进行自定义以进行拆分更安全。

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

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 2011-07-07
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多