在XSLT中,我们如何将一个元素调用为另一个元素?

在XSLT中,我们如何将一个元素调用为另一个元素?,xslt,xsd,xslt-2.0,xsd2code,Xslt,Xsd,Xslt 2.0,Xsd2code,我是stackverflow的新手,希望我能为当前的问题找到正确的方向。我有XSD输入,我正在为此输入编写xslt,并试图将一个元素调用到另一个元素中,但由于某种原因,它无法工作 下面是我的XSD输入 <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:ts="http://schemas.capeclear.com/2003/02/TextSchema&quo

我是stackverflow的新手,希望我能为当前的问题找到正确的方向。我有XSD输入,我正在为此输入编写xslt,并试图将一个元素调用到另一个元素中,但由于某种原因,它无法工作

下面是我的XSD输入

  <?xml version="1.0" encoding="UTF-8"?>
 <xsd:schema xmlns:ts="http://schemas.capeclear.com/2003/02/TextSchema"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" ts:eofStrip="&amp;#10;"
 targetNamespace="http://textschema/ABC_Indirect_Deductions_WIP/MediaOut.xsd"
 xmlns:tns="http://textschema/ABC_Indirect_Deductions_WIP/MediaOut.xsd"
 ts:numberFormat="#,###.#" ts:rootElement="tns:File">

<xsd:element name="File">
    <xsd:complexType>
        <xsd:sequence>
        
            <xsd:element name="Vendor_Data" ts:align="left" minOccurs="0"
                maxOccurs="1" ts:endTag="\n" ts:startTag="1">
                <xsd:complexType>
                    <xsd:sequence>
        
                        <xsd:element name="Vendor_ID" type="xsd:string"
                            ts:fixedLength="5" />
                        <xsd:element name="Assignment_ID" type="xsd:string"
                            ts:fixedLength="6" />
                        <xsd:element name="Begin_Date" type="xsd:string"
                            ts:fixedLength="8" />
                      <xsd:element name="Assigned_Date_Time"type="xsd:string"
                            ts:fixedLength="20" />
                        <xsd:element name="Sender_Code" type="xsd:string"
                            ts:fixedLength="2" />
                        <xsd:element name="Level_Flag"
                            type="xsd:string" ts:fixedLength="1" />
        <xsd:element name="Filler1" type="xsd:string" ts:fixedLength="76"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
                            
  <xsd:element name="Applicant_Data" ts:align="left" minOccurs="0" maxOccurs="unbounded" 
  ts:endTag="\n" ts:startTag="2">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="Class_ID" type="xsd:string"
                            ts:fixedLength="6" minOccurs="0" />
                        <xsd:element name="Applicant_ID" type="xsd:string"
                            ts:fixedLength="9" minOccurs="0" />
                        <xsd:element name="Personal_Number" type="xsd:string"
                            ts:fixedLength="15" minOccurs="0" />
                        <xsd:element name="Effective_Date" type="xsd:string"
                            ts:fixedLength="8" minOccurs="0" ts:align="left" />
                        <xsd:element name="Transfer_Type" type="xsd:string"
                            ts:fixedLength="3" minOccurs="0" />
                        <xsd:element name="Deduction_Percent" type="xsd:integer"
                            ts:fixedLength="5" minOccurs="0" />
                        <xsd:element name="End_Date" type="xsd:string"
                            ts:fixedLength="8" minOccurs="0" />
                        <xsd:element name="Availability_Date" type="xsd:string"
                            ts:fixedLength="8" minOccurs="0" />
                        <xsd:element name="Participant_Name" type="xsd:string"
                            ts:fixedLength="30" minOccurs="0" />
                        <xsd:element name="Allocation10" type="xsd:string"
                            ts:fixedLength="2" minOccurs="0" ts:align="left"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
                                  <xsd:element name="Pay_Data" ts:align="left" minOccurs="0"
                maxOccurs="unbounded" ts:endTag="\n" ts:startTag="091341">  
                <xsd:complexType>
            <xsd:sequence>
                        
        <xsd:element name="Payrate_Rate" type="xsd:string" ts:fixedLength="7" minOccurs="0" />
         <xsd:element name="Pay_Date" type="xsd:string" ts:fixedLength="6" minOccurs="0" />
         <xsd:element name="Payments" type="xsd:string" ts:fixedLength="5" minOccurs="0" />
         <xsd:element name="Payment_Amount" type="xsd:string" ts:fixedLength="11" minOccurs="0" />
         <xsd:element name="Member_ID" type="xsd:string" ts:fixedLength="13" minOccurs="0" />
         <xsd:element name="Frequency" type="xsd:string" ts:fixedLength="1" minOccurs="0" />
         <xsd:element name="Veteran_Name" type="xsd:string" ts:fixedLength="30" minOccurs="0" />
         <xsd:element name="Country" type="xsd:string" ts:fixedLength="10" minOccurs="0" />
         
              </xsd:sequence>
            </xsd:complexType>
            </xsd:element>
            </xsd:sequence>
      </xsd:complexType>
</xsd:element>

下面是我的xslt,我试图将元素begin date从vendor数据元素调用为另外两个元素,称为applicator_data和Pay_data,但它似乎不能按需要工作,因此需要在这方面提供帮助

以下是我为此编写的XSLT,如果需要对其进行任何更改,请告知我,以便将开始日期调用到另一个名为“申请人”数据和“付款”数据的元素中

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

<xsl:template match="Vendor_Data">
    <xsl:call-template name="vendor_tokenize" />
</xsl:template>

<xsl:template match="Applicant_Data">
    <xsl:call-template name="applicant_tokenize" />
</xsl:template>

<xsl:template match="Pay_Data">
    <xsl:call-template name="pay_tokenize" />
</xsl:template>

<xsl:template name="vendor_tokenize">
    
        <xsl:element name="Start_Date">
            <xsl:variable name="MM"
                select="substring(Begin_Date,5,2)" />

            <xsl:variable name="DD"
                select="substring(Begin_Date,7,2)" />

            <xsl:variable name="YYYY"
                select="substring(Begin_Date,1,4)" />
    <xsl:value-of select="normalize-space(concat($YYYY,'-',$MM,'-',$DD))" />
        </xsl:element>
    
</xsl:template>

<xsl:template name="applicant_tokenize">
    <xsl:element name="Applicant">
        <xsl:element name="Applicant_ID">
            <xsl:value-of select="normalize-space(Applicant_ID)" />
        </xsl:element>
        <xsl:element name="Personal_Number">
            <xsl:value-of select="normalize-space(Personal_Number)" />
        </xsl:element>
        <xsl:element name="Event_Date">
            <xsl:variable name="MM"
                select="substring(Effective_Date,5,2)" />

            <xsl:variable name="DD"
                select="substring(Effective_Date,7,2)" />

            <xsl:variable name="YYYY"
                select="substring(Effective_Date,1,4)" />
    <xsl:value-of select="normalize-space(concat($YYYY,'-',$MM,'-',$DD))" />
        </xsl:element>              
    </xsl:element>
</xsl:template>

<xsl:template name="pay_tokenize">
    <xsl:element name="Pay_Date">
        
        <xsl:element name="Pay_Date">
        <xsl:variable name="MM" select="substring(Pay_Date,3,2)" />

        <xsl:variable name="DD" select="substring(Pay_Date,5,2)" />

        <xsl:variable name="YY" select="substring(Pay_Date,1,2)" />

<xsl:value-of select="normalize-space(concat('20',$YY,'-',$MM,'-',$DD))" />
        </xsl:element>
        
    </xsl:element>
</xsl:template>

输入数据文件

0135091341202104032021-04-02.00.04.31 02TGT
3012 3245678 802275 20210414EEE0162021021520210210215Alex,罗纳德FG 091341 20210414 277 16677 802275 2亚历克斯,罗纳德美国


如果需要,请告诉我有关此问题的任何其他信息。

欢迎使用堆栈溢出。“我正在为此输入编写xslt”:想要的输出是什么?你为什么要这么做?xsd2code与此有什么关系?嗨,mzjn,我实际上已经构建了一个现有的接口,在这里我可以在xsd中获取输入,申请人和支付数据的元素是相互连接的。当前正在发送日期元素“生效日期”和“付款日期”,但必须发送“开始日期”,而不是这两个日期。因此,由于申请人和支付数据链接到接口,我试图将供应商标记化中的开始日期调用到申请人和支付标记化中,这两种标记化都可以调用到集成中,请让我知道这是否能提供清晰的理解,我只想将第一个模板中的开始日期元素调用到其他两个模板中。为了澄清问题,请编辑它。模式真的是输入吗?这让人困惑。mzjn,为任何困惑道歉。使用输入数据编辑,当前日期从第二行和第三行发送。但实际上第一行的日期是应该发送的。因此,尝试将元素名begindate从第一个元素调用为其他两个元素,这将解决问题。让我知道这是否清楚,我知道这有点让人困惑,但我只想将元素从第一个元素调用为其他两个元素。如果您需要有关此问题的任何其他信息,请告诉我。请再次编辑您的问题,并添加(1)XML输入示例(不是架构或原始数据)和(2)转换示例输入的预期输出。