当前位置: 首页 > 知识库问答 >
问题:

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

王曜文
2023-03-14

我有以下问题。我不是XSLT方面最伟大的专家,我想成功的是将一个XML从赛贝斯转换为以下内容:

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>

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

共有1个答案

司知
2023-03-14

尝试将此作为起点:

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>

这假设所有行的所有公共数据(输入元素之前和之后)都相同,并且可以从第一行获取。

我怀疑SUM部分需要是其他东西,但我遵循了您的预期输出。

 类似资料:
  • XML输入文件: XML输入文件转换为XML输出文件。将XML输入文件的firstName、middleName和lastName标签合并为XML Ouput文件的name标签,将XML输入文件的address1、address2、city、state和pincode标签合并为XML Ouput文件的address标签。 我几乎转换了代码,但我在这里与empId作斗争。我已经在XSLT文件中手动输

  • 问题内容: 我需要将Opencover Coverage结果导入Jenkins的能力,以便随着时间的推移提取Coverage趋势数据。似乎最好的方法是找到一种方法,将opencover xml格式转换为ncover格式,然后使用NCover插件导入结果。是否存在将xpress将opencover转换为ncover的现有xslt,或将进行转换的开源工具?我已经搜索过,却一无所获。 谢谢 问题答案:

  • 问题内容: 我想使用xsl文件转换一些xml并以某种方式输出结果(我使用的是Android Api Level 8)。 我当前的活动看起来像这样,但是转换器保持为空。LogCat引发一个with ,表示xml格式不正确,但是我确定它是正确的。 我在LogCat中发现了一条提示,提示在上述错误消息之前。 我究竟做错了什么? 这是要转换的xml文件(source.xml) 这是对应的xsl(produ

  • 我想使用XSLT将一些XML转换为JSON。XML如下所示: 我希望JSON如下所示: 推荐的方法是什么? 我已经有了一个方法,它看起来不太好,因为它只适用于xslt 1.0(我认为)和文本块。请参阅此处:https://xsltfiddle.liberty-development.net/naZYrpy/1 我更喜欢使用xslt 3.0和xml to json函数的更有效方法,但似乎不可能添加额

  • 本文向大家介绍ASP.NET使用xslt将xml转换成Excel,包括了ASP.NET使用xslt将xml转换成Excel的使用技巧和注意事项,需要的朋友参考一下 序:   最近在给客户做一个管理系统的时候,客户提出要将查询结果导出到Excel。对于还是实习生的我倍感压力,于是找了点资料。网上有个示例,其中方法十分简单。于是照猫画虎,把方法和心得与大家分享。OK,Let`s go 第一步:   创

  • 在使用Saxon将多个输入文件从hocr转换为alto xml(每个输入文件都需要一个xml输出)时遇到困难,我可以一次转换一个文件,但当我尝试对多个文件使用collection()命令时,会收到错误消息“Source file collection('file:\c:?select=*(hocr))不存在”。所以我知道我使用的路径有问题,但不确定在这种情况下正确使用collection()应该是