繁体   English   中英

使用XSLT将XML转换为XML(sybase输出)

[英]Transform an XML to XML using XSLT ( sybase output )

我有以下问题。 我不是XSLT中最伟大的专家,我想成功的是将XML从Sybase转换为以下内容:

Sybase的输出:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="C:\Users\H50S5OB\Desktop\style.xsl"?>
<root>
<row>
    <Cpty_Id>1</Cpty_Id>
    <SENDER>xxx</SENDER>
    <KUNDE>123</KUNDE>
    <DEPOT>123</DEPOT>
    <ACCOUNT_DEBIT>123</ACCOUNT_DEBIT>
    <ACCOUNT_CREDIT>123</ACCOUNT_CREDIT>
    <CREATED>07.10.2016</CREATED>
    <DEALTYPE>FEES</DEALTYPE>
    <STATEMENT_FROM>30.09.2016</STATEMENT_FROM>
    <STATEMENT_TO>30.09.2016</STATEMENT_TO>
    <BUYSELL>V</BUYSELL>
    <WPNAME>AT0123456789</WPNAME>
    <NOMINAL>1.0</NOMINAL>
    <PRICE>117,155</PRICE>
    <DEAL_STARTDATE>07.10.2016</DEAL_STARTDATE>
    <DEAL_ENDDATE>28.06.2017</DEAL_ENDDATE>
    <FEES_PERCENT>2.5941420000000002</FEES_PERCENT>
    <FEES_AMOUNT>150.0</FEES_AMOUNT>
    <FEES_CREDIT>3.9100000000000001</FEES_CREDIT>
    <FEES>3.9100000000000001</FEES>
</row>
<row>
    <Cpty_Id>1</Cpty_Id>
    <SENDER>xxx</SENDER>
    <KUNDE>123</KUNDE>
    <DEPOT>123</DEPOT>
    <ACCOUNT_DEBIT>123</ACCOUNT_DEBIT>
    <ACCOUNT_CREDIT>123</ACCOUNT_CREDIT>
    <CREATED>07.10.2016</CREATED>
    <DEALTYPE>FEES</DEALTYPE>
    <STATEMENT_FROM>30.09.2016</STATEMENT_FROM>
    <STATEMENT_TO>30.09.2016</STATEMENT_TO>
    <BUYSELL>V</BUYSELL>
    <WPNAME>AT0123456789</WPNAME>
    <NOMINAL>1.0</NOMINAL>
    <PRICE>117,155</PRICE>
    <DEAL_STARTDATE>07.10.2016</DEAL_STARTDATE>
    <DEAL_ENDDATE>28.06.2017</DEAL_ENDDATE>
    <FEES_PERCENT>2.5941420000000002</FEES_PERCENT>
    <FEES_AMOUNT>150.0</FEES_AMOUNT>
    <FEES_CREDIT>3.9100000000000001</FEES_CREDIT>
    <FEES>3.9100000000000001</FEES>
</row>
</root>

我想如何拥有它的输出标题保持原样,输入部分是不同的

   <CONFIRM>
    <Cpty_Id>1</Cpty_Id>
    <SENDER>xxx</SENDER>
    <KUNDE>123</KUNDE>
    <DEPOT>123</DEPOT>
    <ACCOUNT_DEBIT>123</ACCOUNT_DEBIT>
    <ACCOUNT_CREDIT>123</ACCOUNT_CREDIT>
    <CREATED>07.10.2016</CREATED>
    <DEALTYPE>FEES</DEALTYPE>
    <STATEMENT_FROM>30.09.2016</STATEMENT_FROM>
    <STATEMENT_TO>30.09.2016</STATEMENT_TO>
    <ENTRY>
        <BUYSELL>V</BUYSELL>
        <WPNAME>AT0123456789</WPNAME>
        <NOMINAL>1.0</NOMINAL>
        <PRICE>117,155</PRICE>
        <DEAL_STARTDATE>07.10.2016</DEAL_STARTDATE>
        <DEAL_ENDDATE>28.06.2017</DEAL_ENDDATE>
        <FEES_PERCENT>2.5941420000000002</FEES_PERCENT>
        <FEES_AMOUNT>150.0</FEES_AMOUNT>
    </ENTRY>
    <ENTRY>
        <BUYSELL>E</BUYSELL>
        <WPNAME>AT0123456789</WPNAME>
        <NOMINAL>1.0</NOMINAL>
        <PRICE>117,155</PRICE>
        <DEAL_STARTDATE>07.10.2016</DEAL_STARTDATE>
        <DEAL_ENDDATE>28.06.2017</DEAL_ENDDATE>
        <FEES_PERCENT>2.5941420000000002</FEES_PERCENT>
        <FEES_AMOUNT>150.0</FEES_AMOUNT>
    </ENTRY>
    <SUM>
        <FEES_CREDIT>3.9100000000000001</FEES_CREDIT>
        <FEES>3.9100000000000001</FEES>
    </SUM>
   </CONFIRM>

到目前为止这是我的XSLT(不是很多,对不起)

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet          version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
    <html>
    <body>
    <table border="0">
      <xsl:for-each select="row">
        <SENDER><xsl:value-of select="SENDER"/></SENDER>
        <KUNDE><xsl:value-of select="KUNDE"/></KUNDE>
        <DEPOT><xsl:value-of select="DEPOT"/></DEPOT>
        <ADRESS1><xsl:value-of select="ACCOUNT_DEBIT"/></ADRESS1>
        <ADRESS2><xsl:value-of select="ACCOUNT_DEBIT"/></ADRESS2>
        <ADRESS3><xsl:value-of select="ACCOUNT_DEBIT"/></ADRESS3>
        <ADRESS4><xsl:value-of select="ACCOUNT_DEBIT"/></ADRESS4>
        <ACCOUNT_DEBIT><xsl:value-of select="ACCOUNT_DEBIT"/></ACCOUNT_DEBIT>
        <ACCOUNT_CREDIT><xsl:value-of select="ACCOUNT_CREDIT"/></ACCOUNT_CREDIT>
        <CREATED><xsl:value-of select="CREATED"/></CREATED>
        <DEALTYPE><xsl:value-of select="DEALTYPE"/></DEALTYPE>
        <STATEMENT_FROM><xsl:value-of select="STATEMENT_FROM"/></STATEMENT_FROM>
        <STATEMENT_TO><xsl:value-of select="STATEMENT_TO"/></STATEMENT_TO>
      </xsl:for-each>
      <ENTRY>
      <xsl:element name="BUYSELL">
      <xsl:element name="WPNAME">
       </xsl:element>
    </ENTRY>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

也许,有人可以帮我实现我想要的。 非常感谢你。

试试这个作为起点:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/root">
    <CONFIRM>
        <!-- header -->
        <xsl:for-each select="row[1]">
            <xsl:copy-of select="Cpty_Id | SENDER | KUNDE | DEPOT |ACCOUNT_DEBIT | ACCOUNT_CREDIT | CREATED | DEALTYPE | STATEMENT_FROM | STATEMENT_TO"/>
        </xsl:for-each>
        <!-- entries -->
        <xsl:for-each select="row">
            <ENTRY>
                <xsl:copy-of select="BUYSELL | WPNAME | NOMINAL | PRICE | DEAL_STARTDATE |DEAL_ENDDATE | FEES_PERCENT | FEES_AMOUNT"/>
            </ENTRY>
        </xsl:for-each>
        <!-- footer -->
        <xsl:for-each select="row[1]">
            <SUM>
                <xsl:copy-of select="FEES_CREDIT | FEES "/>
            </SUM>
        </xsl:for-each>
   </CONFIRM>
</xsl:template>

</xsl:stylesheet>

这假定所有的公共数据(之前和之后的ENTRY元素)是所有同一row S,并且可以从所述第一可采取row

我怀疑SUM部分需要其他东西,但我按照你预期的输出。

暂无
暂无

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

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