내 MxML 파일을 그룹화하고 분할하는 데 도움이되는 정보를 찾고 있습니다.result-document를 사용하여 xml 파일을 그룹화하고 작업하지 않음
다음은 여러 개의 청크로 그룹화하고 분할하려는 내 샘플 XML입니다. 내 MxML 파일에 여러 개의 ccy 쌍과 성숙도 집합이 있습니다. 파일을 전체적으로 처리 할 때 시간이 걸리므로 아이디어는 쌍으로 그룹화되며 파일을 여러 개의 작은 chuk으로 분할합니다 (구성 가능).
데이터 파일 ... XML
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
xmlns:fxsm="mx.MarketParameters.Forex.Smile"
xpath-default-namespace="mx.MarketParameters.Forex.Smile" xmlns:xc="xmlCache" exclude-result-prefixes="xs math" version="2.0">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
<!-- <xsl:mode on-no-match="shallow-copy"/> -->
<xsl:strip-space elements="*"/>
<!-- define variables [start] -->
<xsl:variable name="noOfSplits" select="3"/>
<!-- define variables [end] -->
<!--- an alternative to shallow-copy in xslt 2.0 -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!--- an alternative to shallow-copy in xslt 2.0 -->
<xsl:template match="/">
<xsl:variable name="original-root-element" select="*"/>
<xsl:variable name="groups">
<xsl:for-each-group select="//pair" group-by="@xc:value">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:for-each-group select="current-group()/maturity" group-by="@xc:value">
<xsl:copy>
<xsl:copy-of select="@*, current-group()/node()"/>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:for-each-group>
</xsl:variable>
<xsl:for-each-group select="$groups/pair" group-by="(position() - 1) mod $noOfSplits">
<xsl:result-document href="files/split{position()}.xml">
<xsl:apply-templates select="$original-root-element">
<xsl:with-param name="contents" select="current-group()" tunnel="yes"/>
</xsl:apply-templates>
</xsl:result-document>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="//smile">
<xsl:param name="contents" tunnel="yes"/>
<xsl:copy>
<xsl:copy-of select="$contents"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
가 친절 위의 코드에 어떤 문제가 있는지 이해하는 데 도움을 appriciate (작동하지 않는)
<?xml version="1.0"?>
<GuiRoot>
<xc:XmlCache xmlns:xc="XmlCache" xc:action="Update">
<xc:XmlCacheArea xc:value="MarketParameters">
<mp:nickName xmlns:mp="mx.MarketParameters" xc:value="./BORATES" xc:subset="Reference">
<mp:date xc:value="TODAY">
<fx:forex xmlns:fx="mx.MarketParameters.Forex">
<fxsm:smile xmlns:fxsm="mx.MarketParameters.Forex.Smile">
<fxsm:pair xc:value="pair1">
<fxsm:maturity xc:value="10Y">
<fxsm:ordinate xc:type="Fields" xc:value="10.000000000">
<mp:bid xc:type="Field" xc:keyFormat="N">0.9236</mp:bid>
<mp:ask xc:type="Field" xc:keyFormat="N">0.9236</mp:ask>
</fxsm:ordinate>
</fxsm:maturity>
<fxsm:maturity xc:value="1Y">
<fxsm:ordinate xc:type="Fields" xc:value="90.000000000">
<mp:bid xc:type="Field" xc:keyFormat="N">3.4369</mp:bid>
<mp:ask xc:type="Field" xc:keyFormat="N">3.4369</mp:ask>
</fxsm:ordinate>
</fxsm:maturity>
</fxsm:pair>
<fxsm:pair xc:value="pair2">
<fxsm:maturity xc:value="10Y">
<fxsm:ordinate xc:type="Fields" xc:value="10.000000000">
<mp:bid xc:type="Field" xc:keyFormat="N">3.4369</mp:bid>
<mp:ask xc:type="Field" xc:keyFormat="N">3.4369</mp:ask>
</fxsm:ordinate>
</fxsm:maturity>
<fxsm:maturity xc:value="1Y">
<fxsm:ordinate xc:type="Fields" xc:value="90.000000000">
<mp:bid xc:type="Field" xc:keyFormat="N">3.4369</mp:bid>
<mp:ask xc:type="Field" xc:keyFormat="N">3.4369</mp:ask>
</fxsm:ordinate>
</fxsm:maturity>
</fxsm:pair>
<fxsm:pair xc:value="pair3">
<fxsm:maturity xc:value="10Y">
<fxsm:ordinate xc:type="Fields" xc:value="10.000000000">
<mp:bid xc:type="Field" xc:keyFormat="N">3.4369</mp:bid>
<mp:ask xc:type="Field" xc:keyFormat="N">3.4369</mp:ask>
</fxsm:ordinate>
</fxsm:maturity>
<fxsm:maturity xc:value="1Y">
<fxsm:ordinate xc:type="Fields" xc:value="90.000000000">
<mp:bid xc:type="Field" xc:keyFormat="N">3.4369</mp:bid>
<mp:ask xc:type="Field" xc:keyFormat="N">3.4369</mp:ask>
</fxsm:ordinate>
</fxsm:maturity>
</fxsm:pair>
<fxsm:pair xc:value="pair4">
<fxsm:maturity xc:value="10Y">
<fxsm:ordinate xc:type="Fields" xc:value="10.000000000">
<mp:bid xc:type="Field" xc:keyFormat="N">3.4369</mp:bid>
<mp:ask xc:type="Field" xc:keyFormat="N">3.4369</mp:ask>
</fxsm:ordinate>
</fxsm:maturity>
<fxsm:maturity xc:value="1Y">
<fxsm:ordinate xc:type="Fields" xc:value="90.000000000">
<mp:bid xc:type="Field" xc:keyFormat="N">3.4369</mp:bid>
<mp:ask xc:type="Field" xc:keyFormat="N">3.4369</mp:ask>
</fxsm:ordinate>
</fxsm:maturity>
</fxsm:pair>
</fxsm:smile>
</fx:forex>
</mp:date>
</mp:nickName>
</xc:XmlCacheArea>
</xc:XmlCache>
</GuiRoot>
내 XSLT ....
미리 감사드립니다.
음, 문제를 설명하는 데 필요한 최소 데이터까지 입력을 줄여야하고 입력에 필요한 결과를 표시해야합니다.단순히 XSLT가 "작동하지 않는다"고 말하면 단순히 원하는 결과와 다양한 요소를 그룹화하려는 XSLT를 작성하거나 복사 한 이유를 설명하지 못합니다. 또한 색슨 (Saxon)을 언급하고 파일을 분할하려는 경우 Saxon 9.8 및 XSLT 3을 사용하면 작업을 쉽게 수행 할 수 있습니다. http://xslt-3-by-example.blogspot.de/2017/06/extracting-sub- trees-of-document-using.html –
"작동하지 않습니다"라고 말하지 마십시오. 우리는 그것이 어떻게 실패했는지 알아야합니다. –
안녕하세요 마틴, 답장을 주셔서 감사합니다 .... – PanduranG