首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于条件的XSLT拆分XML文件

基于条件的XSLT拆分XML文件
EN

Stack Overflow用户
提问于 2021-05-28 01:56:10
回答 1查看 107关注 0票数 0

首先,我对xslt没有足够的经验。我需要帮助将XML拆分成两个基于InoviceNo的文件。如果InvoiceNo = "+“,则将其包含在前面的兄弟姐妹中,其中InvoiceNo等于一个数字。

源文件

代码语言:javascript
复制
<?xml version="1.0"?>
<ns:MT_CheckoutReport xmlns:ns="http://test.com/LE/ChannelAdvisor">
<row>
    <row>
        <InvoiceNo>547194</InvoiceNo>
        <CheckoutDate>8/02/2021 19:29</CheckoutDate>
        <TotalInvoiceAmt>159.99</TotalInvoiceAmt>
        <PymtType>Amazon</PymtType>
        <PymtID></PymtID>
        <PymtExp>0/0</PymtExp>
        <CVV></CVV> 
    </row>
</row>
<row>
    <row>
        <InvoiceNo>547195</InvoiceNo>
        <CheckoutDate>8/02/2021 19:29</CheckoutDate>
        <TotalInvoiceAmt>219.98</TotalInvoiceAmt>
        <PymtType>Amazon</PymtType>
        <PymtID></PymtID>
        <PymtExp>0/0</PymtExp>
        <CVV></CVV> 
    </row>
</row>
<row>
    <row>
        <InvoiceNo>+</InvoiceNo>
        <CheckoutDate></CheckoutDate>
        <TotalInvoiceAmt></TotalInvoiceAmt>
        <PymtType></PymtType>
        <PymtID></PymtID>
        <PymtExp></PymtExp>
        <CVV></CVV> 
    </row>
</row>
</ns:MT_CheckoutReport>

期望输出档案1

代码语言:javascript
复制
<?xml version="1.0"?>
<ns:MT_CheckoutReport xmlns:ns="http://test.com/LE/ChannelAdvisor">
<row>
    <row>
        <InvoiceNo>547194</InvoiceNo>
        <CheckoutDate>8/02/2021 19:29</CheckoutDate>
        <TotalInvoiceAmt>159.99</TotalInvoiceAmt>
        <PymtType>Amazon</PymtType>
        <PymtID></PymtID>
        <PymtExp>0/0</PymtExp>
        <CVV></CVV> 
    </row>
</row>

文件2. InvoiceNo =+将其包含在InvoiceNo = 547195的兄弟姐妹的文件中。

代码语言:javascript
复制
<?xml version="1.0"?>
<ns:MT_CheckoutReport xmlns:ns="http://test.com/LE/ChannelAdvisor">
<row>
    <row>
        <InvoiceNo>547195</InvoiceNo>
        <CheckoutDate>8/02/2021 19:29</CheckoutDate>
        <TotalInvoiceAmt>219.98</TotalInvoiceAmt>
        <PymtType>Amazon</PymtType>
        <PymtID></PymtID>
        <PymtExp>0/0</PymtExp>
        <CVV></CVV> 
    </row>
</row>
<row>
    <row>
        <InvoiceNo>+</InvoiceNo>
        <CheckoutDate></CheckoutDate>
        <TotalInvoiceAmt></TotalInvoiceAmt>
        <PymtType></PymtType>
        <PymtID></PymtID>
        <PymtExp></PymtExp>
        <CVV></CVV> 
    </row>
</row>

我的尝试

代码语言:javascript
复制
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="row">
  <xsl:for-each-group select="row/InvoiceNo" group-by="InvoiceNo">
    <xsl:result-document href="file_{current-grouping-key()}.xml">
       <some>
         <xsl:copy-of select="current-group()"/>
       </some>
    </xsl:result-document>
  </xsl:for-each-group>
</xsl:template>
</xsl:stylesheet> 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-28 04:42:45

为什么不简单地:

XSLT2.0

代码语言:javascript
复制
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://test.com/LE/ChannelAdvisor">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/ns:MT_CheckoutReport">
    <xsl:for-each-group select="row" group-starting-with="row[row/InvoiceNo!='+']">
        <xsl:result-document href="file_{row/InvoiceNo}.xml">
            <ns:MT_CheckoutReport>
                <xsl:copy-of select="current-group()"/>
            </ns:MT_CheckoutReport>
        </xsl:result-document>
    </xsl:for-each-group>
</xsl:template>

</xsl:stylesheet>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67731938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档