xml - 来自 XML 和 XSL 输入的 XML 输出包含合并到一条记录中的所有数据
问题描述
您好我已经创建了一个 XSL 文件并有一个创建 XML 输入的报告,我必须将其转换为另一种类型的 XML(输出)。
XML 输入:
<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by EnterpriseOne Universal Batch Engine-->
<R570018A>
<Properties>
<Version>LU0001</Version>
<Title>Luxembourg VAT return</Title>
<Machine>PCOJDEDEV04</Machine>
<Environment>DV920</Environment>
<User>ASDF</User>
<Role>*ALL</Role>
<Company>XYZ.LP</Company>
<OneWorldRelease>E920</OneWorldRelease>
<Date>10/29/2019</Date>
<Time>13:58:13</Time>
</Properties>
<PageHeaders>
<Page_Header_S2>
<PageHeaderNumber>1</PageHeaderNumber>
<R570018A_ID1>R570018A</R570018A_ID1>
<Variable_000002_ID2>XYZ.LP</Variable_000002_ID2>
<Variable_000005_ID5>13:58:13</Variable_000005_ID5>
<Variable_000004_ID4>2019-10-29</Variable_000004_ID4>
<Variable_000003_ID3>Luxembourg VAT return</Variable_000003_ID3>
<Variable_000006_ID6>1</Variable_000006_ID6>
<of_ID7>of</of_ID7>
<Page___ID9>Page -</Page___ID9>
</Page_Header_S2>
</PageHeaders>
-<Report_Header_S5>
<AgentMatrNbr_ID2>54564646</AgentMatrNbr_ID2>
<DeclarerMatrNbr_ID7>9879862</DeclarerMatrNbr_ID7>
<Year_PO_ID11>2019</Year_PO_ID11>
<AgentRCSNbr_ID4>5362189</AgentRCSNbr_ID4>
<DeclarerRCSNbr_ID8>8795462525</DeclarerRCSNbr_ID8>
<Period_Number_PO_ID13>10</Period_Number_PO_ID13>
<AgentVATNbr_ID6>988765142</AgentVATNbr_ID6>
<DeclarerVATNbr_ID9>98795668</DeclarerVATNbr_ID9>
</Report_Header_S5>
<UDC___Full_View_of_F0005_for_Transfer_57_LV_Driver_S1>
<Vat_Cross_Ref_57_LV_Print_S3>
<Print_F570018A_S6>
<PageHeaderNumber>1</PageHeaderNumber>
<AccountNumber_ID1>472</AccountNumber_ID1>
<Amount_57LV_ID2>-65071.80</Amount_57LV_ID2>
</Print_F570018A_S6>
<Print_F570018A_S6>
<PageHeaderNumber>1</PageHeaderNumber>
<AccountNumber_ID1>019</AccountNumber_ID1>
<Amount_57LV_ID2>-65071.80</Amount_57LV_ID2>
</Print_F570018A_S6>
<Print_F570018A_S6>
<PageHeaderNumber>1</PageHeaderNumber>
<AccountNumber_ID1>741</AccountNumber_ID1>
<Amount_57LV_ID2>5128.21</Amount_57LV_ID2>
</Print_F570018A_S6>
<Print_F570018A_S6>
<PageHeaderNumber>1</PageHeaderNumber>
<AccountNumber_ID1>742</AccountNumber_ID1>
<Amount_57LV_ID2>871.79</Amount_57LV_ID2>
</Print_F570018A_S6>
</Vat_Cross_Ref_57_LV_Print_S3>
</UDC___Full_View_of_F0005_for_Transfer_57_LV_Driver_S1>
</R570018A>
XSL 输入:
<?xml version="1.0" encoding="windows-1252" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<all xmlns="http://www.w3.org/2001/XMLSchema"/>
<xsl:template match="/"><!-- Root template -->
- <eCDFDeclarations xmlns="http://www.ctie.etat.lu/2011/ecdf">
<FileReference>"UMKBJLX20181003T17180101"</FileReference>
<eCDFFileVersion>1.1</eCDFFileVersion>
<Interface>CMUL8</Interface>
-<Agent>
<MatrNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/AgentMatrNbr_ID2"/>
</MatrNbr>
<RCSNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/AgentRCSNbr_ID4"/>
</RCSNbr>
<VATNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/AgentVATNbr_ID6"/>
</VATNbr>
</Agent>
-<Declarations>
-<Declarer>
<MatrNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/DeclarerMatrNbr_ID7"/>
</MatrNbr>
<RCSNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/DeclarerRCSNbr_ID8"/>
</RCSNbr>
<VATNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/DeclarerVATNbr_ID9"/>
</VATNbr>
-<Declaration language="FR" model="1" type="TVA_DECM">
<Year>
<xsl:value-of select="/R570018A/Report_Header_S5/Year_PO_ID11"/>
</Year>
<Period>
<xsl:value-of select="/R570018A/Report_Header_S5/Period_Number_PO_ID13"/>
</Period>
-<FormData>
-<NumericField id="{/R570018A/UDC___Full_View_of_F0005_for_Transfer_57_LV_Driver_S1/Vat_Cross_Ref_57_LV_Print_S3/Print_F570018A_S6/AccountNumber_ID1}">
<xsl:value-of select="/R570018A/UDC___Full_View_of_F0005_for_Transfer_57_LV_Driver_S1/Vat_Cross_Ref_57_LV_Print_S3/Print_F570018A_S6/Amount_57LV_ID2"/>
</NumericField>
</FormData>
</Declaration>
</Declarer>
</Declarations>
</eCDFDeclarations>
</xsl:template>
</xsl:stylesheet>
获得的输出:
- <eCDFDeclarations xmlns="http://www.ctie.etat.lu/2011/ecdf">
<FileReference>"UMKBJLX20181003T17180101"</FileReference>
<eCDFFileVersion>1.1</eCDFFileVersion>
<Interface>CMUL8</Interface>
-<Agent>
<MatrNbr>54564646</MatrNbr>
<RCSNbr>5362189</RCSNbr>
<VATNbr>988765142</VATNbr>
</Agent>
-<Declarations>
-<Declarer>
<MatrNbr>9879862</MatrNbr>
<RCSNbr>8795462525</RCSNbr>
<VATNbr>98795668</VATNbr>
-<Declaration language="FR" model="1" type="TVA_DECM">
<Year>2019</Year>
<Period>10</Period>
-<FormData>
-<NumericField id="472 019 741 742">-65071.80 -65071.80 5128.21 871.79</NumericField>
</FormData>
</Declaration>
</Declarer>
</Declarations>
</eCDFDeclarations>
预期输出:
<?xml version="1.0" encoding="utf-8"?>
<eCDFDeclarations xmlns="http://www.ctie.etat.lu/2011/ecdf">
<FileReference>UMKBJLX20181003T17180101</FileReference>
<eCDFFileVersion>1.1</eCDFFileVersion>
<Interface>CMUL8</Interface>
<Agent>
<MatrNbr>54564646</MatrNbr>
<RCSNbr>5362189</RCSNbr>
<VATNbr>988765142</VATNbr>
</Agent>
<Declarations>
<Declarer>
<MatrNbr>9879862</MatrNbr>
<RCSNbr>8795462525</RCSNbr>
<VATNbr>98795668</VATNbr>
<Declaration language="FR" model="1" type="TVA_DECM">
<Year>2019</Year>
<Period>10</Period>
<FormData>
<NumericField id="472">-65071,80</NumericField>
<NumericField id="019">-65071,80</NumericField>
<NumericField id="741">5128,21</NumericField>
<NumericField id="742">871,79</NumericField>
</FormData>
</Declaration>
</Declarer>
</Declarations>
</eCDFDeclarations>
我的问题是所有数字字段 ID 和金额都打印在同一行,而不是转到下一行。我对使用 XSL 输入很陌生,您能否告诉我应该如何编辑我的 XSL 输入文件?
解决方案
请尝试以下 XSLT。我xsl:output
在顶部添加了元素以生成序言和循环,用于在相关片段中重复值。
XSLT:
<?xml version="1.0" encoding="windows-1252"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" omit-xml-declaration="no" encoding="utf-8"/>
<all xmlns="http://www.w3.org/2001/XMLSchema"/>
<xsl:template match="/">
<!-- Root template -->
<eCDFDeclarations xmlns="http://www.ctie.etat.lu/2011/ecdf">
<FileReference>"UMKBJLX20181003T17180101"</FileReference>
<eCDFFileVersion>1.1</eCDFFileVersion>
<Interface>CMUL8</Interface>
<Agent>
<MatrNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/AgentMatrNbr_ID2"/>
</MatrNbr>
<RCSNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/AgentRCSNbr_ID4"/>
</RCSNbr>
<VATNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/AgentVATNbr_ID6"/>
</VATNbr>
</Agent>
<Declarations>
<Declarer>
<MatrNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/DeclarerMatrNbr_ID7"/>
</MatrNbr>
<RCSNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/DeclarerRCSNbr_ID8"/>
</RCSNbr>
<VATNbr>
<xsl:value-of select="/R570018A/Report_Header_S5/DeclarerVATNbr_ID9"/>
</VATNbr>
<Declaration language="FR" model="1" type="TVA_DECM">
<Year>
<xsl:value-of select="/R570018A/Report_Header_S5/Year_PO_ID11"/>
</Year>
<Period>
<xsl:value-of select="/R570018A/Report_Header_S5/Period_Number_PO_ID13"/>
</Period>
<FormData>
<xsl:for-each select="R570018A/UDC___Full_View_of_F0005_for_Transfer_57_LV_Driver_S1/Vat_Cross_Ref_57_LV_Print_S3/Print_F570018A_S6">
<NumericField id="{AccountNumber_ID1}">
<xsl:value-of select="Amount_57LV_ID2"/>
</NumericField>
</xsl:for-each>
</FormData>
</Declaration>
</Declarer>
</Declarations>
</eCDFDeclarations>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- java - 在这种情况下是否会在同一个 JVM 实例中加载同一个类两次?
- angular - 带有 animateTransform 的 SVG 动画在 Angular 中不起作用
- makefile - NMAKE子目录中文件的通配符
- c++ - 规范化包含编译时 * 或 * 运行时值的对象的构造
- javascript - 如何在 package.json 的项目目录中为 gulp 文件创建路径
- excel-formula - 使用日期自动填充单元格值
- vue.js - 在 git-bash 上创建 vue-cli3 项目
- ios - 如何使 AutoLayout 适合 iPhone 的所有尺寸屏幕
- r - 澄清 R 中嵌套函数和环境的问题
- css - Bootstrap 的网格和卡片问题