在XSLT中,我们如何将一个元素调用为另一个元素?
我是stackverflow的新手,希望我能为当前的问题找到正确的方向。我有XSD输入,我正在为此输入编写xslt,并试图将一个元素调用到另一个元素中,但由于某种原因,它无法工作 下面是我的XSD输入在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
<?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="&#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 02TGT3012 3245678 802275 20210414EEE0162021021520210210215Alex,罗纳德FG 091341 20210414 277 16677 802275 2亚历克斯,罗纳德美国
如果需要,请告诉我有关此问题的任何其他信息。欢迎使用堆栈溢出。“我正在为此输入编写xslt”:想要的输出是什么?你为什么要这么做?xsd2code与此有什么关系?嗨,mzjn,我实际上已经构建了一个现有的接口,在这里我可以在xsd中获取输入,申请人和支付数据的元素是相互连接的。当前正在发送日期元素“生效日期”和“付款日期”,但必须发送“开始日期”,而不是这两个日期。因此,由于申请人和支付数据链接到接口,我试图将供应商标记化中的开始日期调用到申请人和支付标记化中,这两种标记化都可以调用到集成中,请让我知道这是否能提供清晰的理解,我只想将第一个模板中的开始日期元素调用到其他两个模板中。为了澄清问题,请编辑它。模式真的是输入吗?这让人困惑。mzjn,为任何困惑道歉。使用输入数据编辑,当前日期从第二行和第三行发送。但实际上第一行的日期是应该发送的。因此,尝试将元素名begindate从第一个元素调用为其他两个元素,这将解决问题。让我知道这是否清楚,我知道这有点让人困惑,但我只想将元素从第一个元素调用为其他两个元素。如果您需要有关此问题的任何其他信息,请告诉我。请再次编辑您的问题,并添加(1)XML输入示例(不是架构或原始数据)和(2)转换示例输入的预期输出。