2017-04-17 73 views
0

我有下面的XML:覆盖信息的另一XSL转换

<? xml version="1.0" encoding="UTF-8"?> 
<REQUEST_GROUP MISMOVersionID = "2.3.1" > 
<REQUESTING_PARTY> 
< PREFERRED_RESPONSE _VersionIdentifier="2.3.1" _Format="XML"/> 
</REQUESTING_PARTY> 
<SUBMITTING_PARTY _Name = "NETOX" /> 
< REQUEST LoginAccountPassword="00JfDA.S0rxs6" LoginAccountIdentifier="XXXXX" InternalAccountIdentifier="XXXXX" RequestDatetime="2017-04-17T07:51:23"> 
<REQUEST_DATA> 
    <CREDIT_REQUEST MISMOVersionID = "2.3.1" RequestingPartyRequestedByName="1009" LenderCaseIdentifier="5010904"> 
    <CREDIT_REQUEST_DATA CreditRequestDateTime = "2017-04-17T07:51:23" CreditRequestType="Joint" CreditRepositoriesSelectedCount="0" CreditReportType="Merge" BorrowerID="BNUM2 BNUM1" CreditRequestID="CRQ1" CreditReportRequestActionType="Submit"> 
     <CREDIT_REPOSITORY_INCLUDED _TransUnionIndicator = "Y" _ExperianIndicator="Y" _EquifaxIndicator="Y"/> 
    </CREDIT_REQUEST_DATA> 
    <LOAN_APPLICATION> 
     <BORROWER BorrowerID = "BNUM2" JointAssetLiabilityReportingType="NotJointly" JointAssetBorrowerID="BNUM1" _PrintPositionType="Borrower" SchoolingYears="18" _SSN="500222000" _LastName="Homeowner" _HomeTelephoneNumber="9185454545" _FirstName="Mary" _BirthDate="19850202" _AgeAtApplicationYears="32"> 
     <_RESIDENCE _PostalCode = "74133" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="3214 E 30th Pl" BorrowerResidencyType="Current"/> 
     </BORROWER> 
     <BORROWER BorrowerID = "BNUM1" JointAssetLiabilityReportingType="NotJointly" JointAssetBorrowerID="BNUM2" _PrintPositionType="CoBorrower" SchoolingYears="21" _SSN="999405000" _LastName="Homeowner" _HomeTelephoneNumber="9185874547" _FirstName="John" _BirthDate="19780202" _AgeAtApplicationYears="39" MaritalStatusType="Unmarried"> 
     <_RESIDENCE _PostalCode = "74136" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="6600 S Yale Avenue" BorrowerResidencyType="Current"/> 
     </BORROWER> 
    </LOAN_APPLICATION> 
    </CREDIT_REQUEST> 
</REQUEST_DATA> 
</REQUEST> 

<MAILING_ADDRESS _PostalCode = "74137" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="1234 Fake St" BorrowerResidencyType="Current" _Bnum="2"/> 
<MAILING_ADDRESS _PostalCode = "74133" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="7777 S Memorial Drive" BorrowerResidencyType="Current" _Bnum="1"/> 

</REQUEST_GROUP> 

我需要将覆盖与用于每个借款的MAILING_ADDRESS信息_RESIDENCE节点的信息。在BORROWER节点中有BorrowerID,它对应于Mailing_Address中的_Bnum。 _RESIDENCE仍然应该是节点;只有信息应该改变。我尝试过的所有东西都以具有相同地址信息的借款人结束。

+0

“*在BORROWER节点中有BorrowerID,它对应于Mailing_Address中的_Bnum。*”我没有看到它的确如此。 –

回答

0

好吧,给这个XML(不得不清理格式化一下)。

<REQUEST_GROUP MISMOVersionID = "2.3.1" > 
<REQUESTING_PARTY > 
<PREFERRED_RESPONSE _VersionIdentifier="2.3.1" _Format="XML"/> 
</REQUESTING_PARTY> 
<SUBMITTING_PARTY _Name = "NETOX" /> 
<REQUEST LoginAccountPassword="00JfDA.S0rxs6" LoginAccountIdentifier="XXXXX" InternalAccountIdentifier="XXXXX" RequestDatetime="2017-04-17T07:51:23"> 
<REQUEST_DATA> 
    <CREDIT_REQUEST MISMOVersionID = "2.3.1" RequestingPartyRequestedByName="1009" LenderCaseIdentifier="5010904"> 
    <CREDIT_REQUEST_DATA CreditRequestDateTime = "2017-04-17T07:51:23" CreditRequestType="Joint" CreditRepositoriesSelectedCount="0" CreditReportType="Merge" BorrowerID="BNUM2 BNUM1" CreditRequestID="CRQ1" CreditReportRequestActionType="Submit"> 
     <CREDIT_REPOSITORY_INCLUDED _TransUnionIndicator = "Y" _ExperianIndicator="Y" _EquifaxIndicator="Y"/> 
    </CREDIT_REQUEST_DATA> 
    <LOAN_APPLICATION> 
     <BORROWER BorrowerID = "BNUM2" JointAssetLiabilityReportingType="NotJointly" JointAssetBorrowerID="BNUM1" _PrintPositionType="Borrower" SchoolingYears="18" _SSN="500222000" _LastName="Homeowner" _HomeTelephoneNumber="9185454545" _FirstName="Mary" _BirthDate="19850202" _AgeAtApplicationYears="32"> 
     <_RESIDENCE _PostalCode = "74133" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="3214 E 30th Pl" BorrowerResidencyType="Current"/> 
     </BORROWER> 
     <BORROWER BorrowerID = "BNUM1" JointAssetLiabilityReportingType="NotJointly" JointAssetBorrowerID="BNUM2" _PrintPositionType="CoBorrower" SchoolingYears="21" _SSN="999405000" _LastName="Homeowner" _HomeTelephoneNumber="9185874547" _FirstName="John" _BirthDate="19780202" _AgeAtApplicationYears="39" MaritalStatusType="Unmarried"> 
     <_RESIDENCE _PostalCode = "74136" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="6600 S Yale Avenue" BorrowerResidencyType="Current"/> 
     </BORROWER> 
    </LOAN_APPLICATION> 
    </CREDIT_REQUEST> 
</REQUEST_DATA> 
</REQUEST> 

<MAILING_ADDRESS _PostalCode = "74137" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="1234 Fake St" BorrowerResidencyType="Current" _Bnum="2"/> 
<MAILING_ADDRESS _PostalCode = "74133" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="7777 S Memorial Drive" BorrowerResidencyType="Current" _Bnum="1"/> 

</REQUEST_GROUP> 

这个XSLT将产生结果。诀窍是使用身份转换,获取您需要的地址并将BNUM1转换为@ _Bnum ='1'。

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

<!-- Store the addresses so we can get to them later--> 
<xsl:variable name='mailing' select='//MAILING_ADDRESS'/> 

<!-- A regular identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match='BORROWER/_RESIDENCE'> 
    <!-- Convert "BNUM1" to just 1 and store in $addressid--> 
    <xsl:variable name='addressid' select='substring(ancestor::BORROWER/@BorrowerID, 5)'/> 

    <!-- use the address id to find the MAILING_ADDRESS--> 
    <xsl:variable name='address' select='$mailing[@_Bnum=$addressid]'/> 

    <xsl:element name='_RESIDENCE'> 
     <xsl:attribute name='addressid'><xsl:value-of select='$addressid'/></xsl:attribute> 
     <xsl:attribute name='_PostalCode'><xsl:value-of select='$address/@_PostalCode'/></xsl:attribute> 
     <xsl:attribute name='_State'><xsl:value-of select='$address/@_State'/></xsl:attribute> 
     <xsl:attribute name='_City'><xsl:value-of select='$address/@_City'/></xsl:attribute> 
     <xsl:attribute name='_StreetAddress'><xsl:value-of select='$address/@_StreetAddress'/></xsl:attribute> 
     <xsl:attribute name='BorrowerResidencyDurationYears'><xsl:value-of select='$address/@BorrowerResidencyDurationYears'/></xsl:attribute> 
     <xsl:attribute name='BorrowerResidencyType'><xsl:value-of select='$address/@BorrowerResidencyType'/></xsl:attribute> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet> 

会产生这个XML结果

<?xml version="1.0"> 
<REQUEST_GROUP MISMOVersionID="2.3.1"> 
<REQUESTING_PARTY> 
<PREFERRED_RESPONSE _VersionIdentifier="2.3.1" _Format="XML"> 
</PREFERRED_RESPONSE> 
</REQUESTING_PARTY> 
<SUBMITTING_PARTY _Name="NETOX"> 
</SUBMITTING_PARTY> 
<REQUEST LoginAccountPassword="00JfDA.S0rxs6" LoginAccountIdentifier="XXXXX" InternalAccountIdentifier="XXXXX" RequestDatetime="2017-04-17T07:51:23"> 
<REQUEST_DATA> 
<CREDIT_REQUEST MISMOVersionID="2.3.1" RequestingPartyRequestedByName="1009" LenderCaseIdentifier="5010904"> 
<CREDIT_REQUEST_DATA CreditRequestDateTime="2017-04-17T07:51:23" CreditRequestType="Joint" CreditRepositoriesSelectedCount="0" CreditReportType="Merge" BorrowerID="BNUM2 BNUM1" CreditRequestID="CRQ1" CreditReportRequestActionType="Submit"> 
<CREDIT_REPOSITORY_INCLUDED _TransUnionIndicator="Y" _ExperianIndicator="Y" _EquifaxIndicator="Y"> 
</CREDIT_REPOSITORY_INCLUDED> 
</CREDIT_REQUEST_DATA> 
<LOAN_APPLICATION> 
<BORROWER BorrowerID="BNUM2" JointAssetLiabilityReportingType="NotJointly" JointAssetBorrowerID="BNUM1" _PrintPositionType="Borrower" SchoolingYears="18" _SSN="500222000" _LastName="Homeowner" _HomeTelephoneNumber="9185454545" _FirstName="Mary" _BirthDate="19850202" _AgeAtApplicationYears="32"> 
<_RESIDENCE addressid="2" _PostalCode="74137" _State="OK" _City="Tulsa" _StreetAddress="1234 Fake St" BorrowerResidencyDurationYears="6" BorrowerResidencyType="Current" /> 
</BORROWER> 
<BORROWER BorrowerID="BNUM1" JointAssetLiabilityReportingType="NotJointly" JointAssetBorrowerID="BNUM2" _PrintPositionType="CoBorrower" SchoolingYears="21" _SSN="999405000" _LastName="Homeowner" _HomeTelephoneNumber="9185874547" _FirstName="John" _BirthDate="19780202" _AgeAtApplicationYears="39" MaritalStatusType="Unmarried"> 
<_RESIDENCE addressid="1" _PostalCode="74133" _State="OK" _City="Tulsa" _StreetAddress="7777 S Memorial Drive" BorrowerResidencyDurationYears="6" BorrowerResidencyType="Current" /> 
</BORROWER> 
</LOAN_APPLICATION> 
</CREDIT_REQUEST> 
</REQUEST_DATA> 
</REQUEST> 
<MAILING_ADDRESS _PostalCode="74137" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="1234 Fake St" BorrowerResidencyType="Current" _Bnum="2"> 
</MAILING_ADDRESS> 
<MAILING_ADDRESS _PostalCode="74133" BorrowerResidencyDurationYears="6" _State="OK" _City="Tulsa" _StreetAddress="7777 S Memorial Drive" BorrowerResidencyType="Current" _Bnum="1"> 
</MAILING_ADDRESS> 
</REQUEST_GROUP> 
0

使用身份转换与_RESIDENCE的覆盖,这将在属性复制从相应的MAILING_ADDRESS元素:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="_RESIDENCE"> 
    <xsl:variable name="residenceBnum" 
        select="substring(../@BorrowerID, 5)"/> 
    <xsl:copy> 
     <xsl:copy-of select="/REQUEST_GROUP 
          /MAILING_ADDRESS[@_Bnum = $residenceBnum]/@*"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

您可能希望如果您希望从新的_RESIDENCE元素中省略某些属性,则可以为属性应用附加的过滤器。 (例如,你没有指定,如果@_Bnum应该过来。)