繁体   English   中英

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

[英]Split XML file using Information Studio in 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>

我在这里想念什么吗? 提前致谢!

该问题是由于将提取的文档加载到名为“ Fab ”的临时数据库中这一事实引起的。 XSLT转换将在其中应用。 成功后,结果将移至目标数据库。 文档的移动依赖于Information Studio特定的属性,这些属性会自动分配给主要XSLT输出的结果,而不分配给任何来自xsl:result-document调用的辅助输出。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM