1

次のような 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>

ここで何か不足していますか?前もって感謝します!

4

1 に答える 1

1

この問題は、取り込まれたドキュメントが「 」という名前の一時データベースにロードされることが原因で発生しますFab。そこXSLTに変換が適用されます。成功すると、結果がターゲット データベースに移動されます。ドキュメントのこの移動は、メイン出力の結果に自動的に割り当てられる Information Studio 固有のプロパティに依存しますが、呼び出しXSLTからのセカンダリ出力には割り当てられません。xsl:result-document

XSLTこのステップを、これらのプロパティをすべての結果に明示的にコピーするステップに置き換えることは可能ですXQueryが、その場合、Information Studio の特定のバージョンに依存することになります。コレクターをコピーし、それをカスタマイズして分割する方がはるかに安全です。

Github には非常に良い例がいくつかあります: https://github.com/marklogic/infostudio-plugins

于 2012-05-31T14:36:56.250 に答える